假设有一个Obj类
class Obj{
int field;
}
并且您有一个Obj
实例列表,即List<Obj> lst
。
现在,如何在Java8中使用流条件在过滤条件下(例如,对于object ,条件为)field
从列表中的对象中找到int字段值的总和?lst
o
o.field > 10
Answers:
你可以做
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();
您也可以collect
使用适当的汇总收集器,例如Collectors#summingInt(ToIntFunction)
返回一个
Collector
,该产生一个应用于输入元素的整数函数的总和。如果不存在任何元素,则结果为0。
例如
Stream<Obj> filtered = list.stream().filter(o -> o.field > 10);
int sum = filtered.collect(Collectors.summingInt(o -> o.field));
在Java 8中,对于Obj
带有field
and getField()方法的实体,可以使用:
List<Obj> objs ...
Stream<Obj> notNullObjs =
objs.stream().filter(obj -> obj.getValue() != null);
Double sum = notNullObjs.mapToDouble(Obj::getField).sum();
Indicator
任何地方,所有答案都已经非常具体了。因此,除非您可以编辑答案以真正为当前主题添加有用的内容,否则建议您删除它。
int sum = lst.stream().mapToInt(Obj::getField).filter(n -> n > 10).sum();