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();