2014-04-16 2 views
24

Angenommen, hat eine Klasse ObjJava8: Summenwert von bestimmtem Feld der Objekte in einer Liste

class Obj{ 

    int field; 
} 

und dass Sie eine Liste der Obj Instanzen, das heißt List<Obj> lst. Jetzt

, wie kann ich mit Strömen, die Summe der Werte der int Felder field von den Objekten in der Liste in Java8 finden lst unter einem Filterkriterium (beispielsweise für ein Objekt o, ist das Kriterium o.field > 10)?

Antwort

60

Sie können

tun
int sum = lst.stream().filter(o -> o.getField() > 10).mapToInt(o -> o.getField()).sum(); 

oder (unter Anwendung der Methode Referenz)

int sum = lst.stream().filter(o -> o.getField() > 10).mapToInt(Obj::getField).sum(); 
+0

eine der besten Antworten .. –

+0

Oder 'int sum = lst.stream(). MapToInt (Obj :: getField) .filter (n -> n> 10) .sum(); ' – 4castle

3

Versuchen:

int sum = lst.stream().filter(o -> o.field > 10).mapToInt(o -> o.field).sum(); 
4

können Sie versuchen,

int sum = list.stream().filter(o->o.field>10).mapToInt(o->o.field).sum(); 
Wie

erklärt here

3

Sie können auch mit einem geeigneten collect Summiereinrichtung Kollektor wie Collectors#summingInt(ToIntFunction)

eine Collector zurück, der die Summe eines ganzzahligen Funktion angelegt an die Eingangselemente erzeugt. Wenn keine Elemente vorhanden sind, das Ergebnis 0.

Zum Beispiel

Stream<Obj> filtered = list.stream().filter(o -> o.field > 10); 
int sum = filtered.collect(Collectors.summingInt(o -> o.field)); 
Verwandte Themen