Datenstrukrue, List<Map<Integer, Map<String, .

Status
Nicht offen für weitere Antworten.

metalfan

Aktives Mitglied
Hiho Netzbewohner,

bin "lost" in einer Datenstruktur, eigentlich ist es genau das was ich mir vorgestellt habe aber der Zugriff ist doch nicht so einfach wie gedacht.
Die Datenstruktur sieht so aus:

Code:
List<Map<Integer, Map<String, List<Integer>>>>
		test= new LinkedList
			<Map<Integer, Map<String, List<Integer>>>>();

Durchlaufe die gesamte Struktur und gebe die untersten Listen aus.
Code:
int o=0;
		for (Map<Integer, Map<String, List<Integer>>> x:test){
			System.out.println("Äußere Liste, Element"+o);
			for ( Map<String, List<Integer>> elem : x.values()){  
				for ( String elem2 : elem.keySet() ){ 				
					for (int c:elem.get(elem2)){
						System.out.println(c);
					}
				}
			}
			o++;
		}

Gebe dies und jenes aus...
Code:
for (Map<Integer, Map<String, List<Integer>>> x:test){
			System.out.println(x.keySet()); //[1, 3, 5]
			System.out.println(x.get(1)); //{Outputs=[1, 2, 3], Ks=[100, 101, 102], Js=[10, 11, 12]}
			for (Integer f: x.keySet()){
				System.out.println(f); // 1 3 5
			}
		}



Zb wenn ich die "Outputs" zu 3 (Map<Integer) haben möchte, wie stellt man das an?

Mfg
metalfan








Zum experimentieren das ganze mit Werten:

Code:
import java.util.*;

public class JavaForum {
	
	private void test8(){
		List<Map<Integer, Map<String, List<Integer>>>>
		test= new LinkedList
			<Map<Integer, Map<String, List<Integer>>>>();
		
		//Innere Map1
		Map<String, List<Integer>> test1 = new HashMap<String, List<Integer>>();
		test1.put("Outputs", createList(1)); //Innere Listen
		test1.put("Js", createList(10));
		test1.put("Ks", createList(100));
		
		
		//Innere Map2
		Map<String, List<Integer>> test2 = new HashMap<String, List<Integer>>();
		test2.put("Outputs", createList(2)); //Innere Listen
		test2.put("Js", createList(20));
		test2.put("Ks", createList(200));
		
		//Innere Map3
		Map<String, List<Integer>> test3 = new HashMap<String, List<Integer>>();
		test3.put("Outputs", createList(3)); //Innere Listen
		test3.put("Js", createList(30));
		test3.put("Ks", createList(300));
		
		//Äußere Map
		Map<Integer, Map<String, List<Integer>>> 
		outputs = new 
		HashMap<Integer, Map<String, List<Integer>>>();
		
		outputs.put(1, test1);
		outputs.put(3, test2);
		outputs.put(5, test3);
		
		//Äußerste Liste
		test.add(outputs);
		
		
		int o=0;
		for (Map<Integer, Map<String, List<Integer>>> x:test){
			System.out.println("Äußere Liste, Element"+o);
			x.keySet();
			for ( Map<String, List<Integer>> elem : x.values()){ //x.values gibt die Map 
				for ( String elem2 : elem.keySet() ){ 				//<String, List zurück
					for (int c:elem.get(elem2)){
						System.out.println(c);
					}
				}
			}
			o++;
		}
	
	}
	
	private List<Integer> createList(int start){
		List<Integer> test = new LinkedList<Integer>();
		for (int n=start;n<(start+3);n++)
				test.add(n);
		return test;
	}
	
	public static void main(String[] args){
		JavaForum a = new JavaForum();
		a.test8();
		
		
	}
}
 
S

SlaterB

Gast
> Zb wenn ich die "Outputs" zu 3 (Map<Integer) haben möchte, wie stellt man das an?

ist das die einzige Frage in dem seitenlangen Post?
die verstehe ich aber nicht ;)

du hast doch oben schon Code um alle äußeren Maps auszugeben,
wenn du nicht alle sondern nur 3 aus der äußeren Liste haben willst,
dann gib nicht alle sondern nur 3 aus?..
 

metalfan

Aktives Mitglied
Keine chance, bin an perl Datenstrukturen gewöhnt - die sind ziemlich intuitiv.

EDIT:
Code:
for (Map<Integer, Map<String, List<Integer>>> x:test){
			for (int r:x.get(1).get("Outputs")){
				System.out.println(r);
			}
		}

Gibt aus:
1
2
3

Danke für den Tip


Mfg
metalfan
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben