2016-06-30 6 views
1

diesen Code zu haben:Ersetzen foreach-Schleife mit Strom API-Aufruf in Java

public Map<Job, Collection<JobTransform>> getPartitioning() { 
    Map<Job, Collection<JobTransform>> partitioning = new IdentityHashMap<>(); 
    for (JobTransform jobTransform : content) { 
     Job job = jobTransform.getJob(); 
     Collection<JobTransform> collection = partitioning.get(job); 
     if (collection == null) { 
      collection = new LinkedList<>(); 
      partitioning.put(job, collection); 
     } 
     collection.add(jobTransform); 
    } 
    return partitioning; 
} 

und 'Inhalt' ein Konstruktor Parameter für die Klasse ist diese Methode in implementiert ist, wie kann ich den for-each konvertieren Schleife in Code mit Stream-API in Java? Für jetzt habe ich nur

content.stream().map(JobTransform::getJob) 

und ich weiß nicht, wie kann ich jeden Job weiter verwenden. Benutze ich die API falsch? Bitte hilf mir meinen Code zu verbessern!

+0

Schleife über Karteninhalt - 'map.entrySet(). ForEach ((entry) -> {...});' –

+0

Das ist der Platz für den üblichen Haftungsausschluss: Sie wollen sicherlich keine LinkedList verwenden 'Hier bietet es keinen Vorteil gegenüber der effizienteren 'ArrayList' in diesem Anwendungsfall, insbesondere, da Sie es im Ergebnistyp sowieso auf' Collection' erweitern. Sie können auch genau überlegen, ob Sie wirklich eine IdentityHashMap benötigen. Wenn "Job" keine Gleichheit hat, die Sie überschreiben müssen, müssen Sie diese spezielle Map nicht verwenden. Sehr wahrscheinlich wird ein einfaches 'content.stream(). Collect (Collectors.groupingBy (JobTransform :: getJob))' die gewünschte Sache tun, obwohl diese speziellen Sammlungstypen nicht verwendet werden. – Holger

Antwort

4
content.stream().collect(Collectors.groupingBy(JobTransform::getJob, IdentityHashMap::new, Collectors.toCollection(LinkedList::new))); 

Dies wird genau das Gleiche tun wie Ihr Nicht-Stream-Code.