对列表中对象的特定字段的值求和

2022-08-31 10:22:11

假设有一个类:Obj

class Obj {
  int field;
}

...并且您有一个实例列表,即 .ObjList<Obj> lst

现在,我如何用流找到过滤条件下列表中对象的int字段值的总和(例如,对于对象,标准是)?fieldlstoo.field > 10


答案 1

你可以做

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

或(使用方法参考)

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

答案 2

您还可以使用适当的求和收集器,如收集器#summingInt(ToIntFunction)collect

返回 一个,该函数生成应用于输入元素的整数值函数的总和。如果不存在任何元素,则结果为 0。Collector

例如

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

推荐