Angenommen, Sie haben eine Klasse Obj
class Obj{
int field;
}
und dass Sie eine Liste von Obj
Instanzen haben, dh List<Obj> lst
.
Wie kann ich nun in Java8 mit Streams die Summe der Werte der int-Felder field
aus den Objekten in der Liste lst
unter einem Filterkriterium finden (z. B. für ein Objekt o
ist das Kriterium o.field > 10
)?
java
filter
java-8
java-stream
mat_boy
quelle
quelle
int sum = lst.stream().mapToInt(Obj::getField).filter(n -> n > 10).sum();
Du kannst es versuchen
int sum = list.stream().filter(o->o.field>10).mapToInt(o->o.field).sum();
Wie hier erklärt
quelle
Sie können auch
collect
mit einem entsprechenden Summierkollektor wieCollectors#summingInt(ToIntFunction)
Zum Beispiel
Stream<Obj> filtered = list.stream().filter(o -> o.field > 10); int sum = filtered.collect(Collectors.summingInt(o -> o.field));
quelle
Versuchen:
int sum = lst.stream().filter(o -> o.field > 10).mapToInt(o -> o.field).sum();
quelle
In Java 8 können Sie für eine
Obj
Entität mit derfield
Methode getField () Folgendes verwenden:List<Obj> objs ... Stream<Obj> notNullObjs = objs.stream().filter(obj -> obj.getValue() != null); Double sum = notNullObjs.mapToDouble(Obj::getField).sum();
quelle
Indicator
überall in der Frage und alle Antworten sind schon sehr spezifisch. Wenn Sie Ihre Antwort nicht bearbeiten können, um dem vorliegenden Thema wirklich etwas Nützliches hinzuzufügen, sollten Sie es löschen.Sie können diese Methode ausführen: "IntSummaryStatistics"
IntSummaryStatistics insum = li.stream().filter(v-> v%2==0).mapToInt(mapper->mapper).summaryStatistics();
quelle