Suponga que tiene una clase Obj
class Obj{
int field;
}
y que tiene una lista de Obj
instancias, es decir List<Obj> lst
.
Ahora, ¿cómo puedo encontrar en Java8 con flujos la suma de los valores de los campos int field
de los objetos en la lista lst
bajo 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
collect
con 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
Obj
entidad con elfield
mé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
Indicator
ninguna 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