mat*_*boy 61 java filter java-8 java-stream
假设有一个Obj类
class Obj{
int field;
}
Run Code Online (Sandbox Code Playgroud)
并且你有一个Obj实例列表,即List<Obj> lst.
现在,我如何在Java8中找到流中过滤标准下field列表中对象的int字段值的总和lst(例如,对象o,标准是o.field > 10)?
Ani*_*kur 117
你可以做
int sum = lst.stream().filter(o -> o.getField() > 10).mapToInt(o -> o.getField()).sum();
Run Code Online (Sandbox Code Playgroud)
或(使用方法参考)
int sum = lst.stream().filter(o -> o.getField() > 10).mapToInt(Obj::getField).sum();
Run Code Online (Sandbox Code Playgroud)
在 Java 8 中,对于具有getField() 方法的Obj实体,您可以使用:field
List<Obj> objs ...
Double sum = objs.stream()
.filter(Objects::notNull);
.mapToDouble(Obj::getField)
.sum();
Run Code Online (Sandbox Code Playgroud)
尝试:
int sum = lst.stream().filter(o -> o.field > 10).mapToInt(o -> o.field).sum();
Run Code Online (Sandbox Code Playgroud)
小智 5
你可以试试
int sum = list.stream().filter(o->o.field>10).mapToInt(o->o.field).sum();
Run Code Online (Sandbox Code Playgroud)
像这里解释
您也可以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));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70927 次 |
| 最近记录: |