sumar suma listas elementos array java filter java-8 java-stream

listas - Java8: suma los valores del campo específico de los objetos en una lista



sumar dos listas en java (4)

Supongamos que tiene una clase Obj

class Obj{ int field; }

y que tiene una lista de instancias Obj , es decir, List<Obj> lst .

Ahora, ¿cómo puedo encontrar en Java8 con streams la suma de los valores del field int fields de los objetos en la lista lst bajo un criterio de filtrado (por ejemplo, para un objeto o , el criterio es o.field > 10 )?


Puedes probar

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

Como se explica here


También puede collect con un Collectors#summingInt(ToIntFunction) apropiado como Collectors#summingInt(ToIntFunction)

Devuelve un Collector que produce la suma de una función de valor entero aplicada a los elementos de entrada. Si no hay elementos presentes, el resultado es 0.

Por ejemplo

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


Tratar:

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


Tu puedes hacer

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

o (usando la referencia del Método)

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