2016-05-16 7 views
1

I Methode verfolgt habenWie foreach Lambda ändern mit parallelen Streams

private Set<Chapter> chapters; 
public long getCount() { 
    long count = 0; 
    for (Chapter chapter : chapters) count += chapter.getCount(); 
    return count; 
} 

und ich möchte diesen Code verbessern mit Hilfe von Java 8 Funktionen wie Ströme und lambda, aber ich kann nicht die externen Variablen in Lambda ändern , also habe ich versucht zu schummeln, aber es war eine schreckliche Lösung.

Können Sie mir dabei helfen - oder einen nützlichen Link für mich bereitstellen. Es tut uns leid, wenn es ein Duplikat ist.

+0

Das ist nicht eine „schreckliche Lösung“, wie der gleichzeitige Zugriff auf ein Array-Element ist * vollständig gebrochen finden * . Also ist es überhaupt keine Lösung. Aber Sie haben bereits [die richtige Lösung gefunden] (http://stackoverflow.com/a/37249194/2711488) ... – Holger

Antwort

3

nicht mehr egal, ich bin schon einreihige Lösung mit mapToLong()

https://docs.oracle.com/javase/tutorial/collections/streams/reduction.html

public long getCount() { 
    return chapters.parallelStream().mapToLong(Chapter::getCount).sum(); 
} 
+1

Beachten Sie, dass die Verwendung von 'parallelStream' die Performance wesentlich beeinträchtigen kann, wenn es keine große Anzahl von Kapiteln gibt. –

+0

Ja, ich wusste es, danke für die nützliche Notiz – Batiaev