Suponga que tiene una clase Obj
class Obj{
int field;
}
y que tiene una lista de Objinstancias, es decir List<Obj> lst.
Ahora, ¿cómo puedo encontrar en Java8 con flujos la suma de los valores de los campos int fieldde los objetos en la lista lstbajo un criterio de filtrado (por ejemplo, para un objeto o, el criterio es o.field > 10)?
java
filter
java-8
java-stream
mat_boy
fuente
fuente

int sum = lst.stream().mapToInt(Obj::getField).filter(n -> n > 10).sum();Puedes probar
int sum = list.stream().filter(o->o.field>10).mapToInt(o->o.field).sum();Como se explica aquí
fuente
También puede
collectcon un colector de suma apropiado comoCollectors#summingInt(ToIntFunction)Por ejemplo
Stream<Obj> filtered = list.stream().filter(o -> o.field > 10); int sum = filtered.collect(Collectors.summingInt(o -> o.field));fuente
Tratar:
int sum = lst.stream().filter(o -> o.field > 10).mapToInt(o -> o.field).sum();fuente
En Java 8 para una
Objentidad con elfieldmétodo getField (), puede usar:List<Obj> objs ... Stream<Obj> notNullObjs = objs.stream().filter(obj -> obj.getValue() != null); Double sum = notNullObjs.mapToDouble(Obj::getField).sum();fuente
Indicatorninguna parte de la pregunta y todas las respuestas ya son muy específicas. Entonces, a menos que pueda editar su respuesta para agregar algo realmente útil al tema en cuestión, le sugiero que lo elimine.Puede hacer este método: "IntSummaryStatistics"
IntSummaryStatistics insum = li.stream().filter(v-> v%2==0).mapToInt(mapper->mapper).summaryStatistics();fuente