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