对列表中对象的特定字段的值求和
2022-08-31 10:22:11
假设有一个类:Obj
class Obj {
int field;
}
...并且您有一个实例列表,即 .Obj
List<Obj> lst
现在,我如何用流找到过滤条件下列表中对象的int字段值的总和(例如,对于对象,标准是)?field
lst
o
o.field > 10
假设有一个类:Obj
class Obj {
int field;
}
...并且您有一个实例列表,即 .Obj
List<Obj> lst
现在,我如何用流找到过滤条件下列表中对象的int字段值的总和(例如,对于对象,标准是)?field
lst
o
o.field > 10
你可以做
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();
您还可以使用适当的求和收集器,如收集器#summingInt(ToIntFunction)
collect
返回 一个,该函数生成应用于输入元素的整数值函数的总和。如果不存在任何元素,则结果为 0。
Collector
例如
Stream<Obj> filtered = list.stream().filter(o -> o.field > 10);
int sum = filtered.collect(Collectors.summingInt(o -> o.field));