2016-08-11 3 views
-1

Ich habe die folgenden Objekte in einem ArrayList und ein Wert in diesem Objekt wird als die Zahlen am Anfang, die Id von etwas sind dargestellt.Verschmelzen n Anzahl der Liste in eine Karte basierend auf einem Wert in der Liste

enter image description here

Ich brauche ein Map Objekt zu erstellen, deren Schlüssel sollte die ID von Objekten und deren Werte sollten die Objekte mit der ID sein. Am Ende des Tages hätte ich gerne eine Karte in der Art.

enter image description here

ich schon löste dieses Problem mit zwei for-Schleifen und vielen if Aussagen, aber es scheint mir sehr hässlich.

Jede sauberere Lösung würde geschätzt werden.

+1

Ich bekomme nicht das erste Bild: über welche Art von Liste sprichst du? Sie können keine Liste haben, in der das ** erste ** Element eine ID ist; und die anderen Elemente sind etwas anderes. Dann: Karten haben einen Wert pro Schlüssel. Wenn Sie also wirklich mehrere Einträge haben möchten, benötigen Sie eine 'Map >'. – GhostCat

+0

@GhostCat Dies ist nur eine Illustration. Dies ist eine ganz normale Liste und ein Wert in einem Objekt, das die Liste enthält, wird als Id dargestellt. Wir sagen, es ist nur ein Wert in dem Objekt, das die Liste enthält. –

+1

Sie müssen Code anzeigen und ein bestimmtes Problem angeben. Dies ist kein Code-Schreibdienst. – marstran

Antwort

3
Map<Integer, List<Foo>> result = list.stream().collect(Collectors.groupingBy(Foo::getId)); 
0

Edited die Frage bearbeiten passen, ist es so einfach wie diese:

ArrayList<Element> list = ...; 
HashMap<Integer, List<Element>> map = new HashMap<Integer, List<Element>>(); 

for(Element e : list) { 
    ArrayList<Element> auxList; 
    if(map.contains(e.getId()) { 
     auxList = map.get(e.getId()); 
    } else { 
     auxList = new ArrayList<Element>(); 
     map.put(e.getId(), auxList); 
    } 
    auxList.add(e); 
} 

Nur der Startliste iterieren und die Elemente auf der Karte hinzufügen. Wenn die Karte bereits die ID enthält, fügen Sie sie der Liste hinzu. Wenn nicht, erstellen Sie eine neue Liste.

+0

Ich habe meine Frage bearbeitet. Ich denke, es ist jetzt klarer. –

+0

@AdInfinitum Ich habe meine Antwort konsequent bearbeitet. Ich hoffe es hilft. –

Verwandte Themen