Java8:列表中对象特定字段的值总和

Java8:列表中对象特定字段的值总和,java,filter,java-8,java-stream,Java,Filter,Java 8,Java Stream,假设有一个类Obj class Obj{ int field; } 您有一个Obj实例列表,即list lst 现在,在Java8 with streams中,如何在过滤条件下(例如,对于对象o,条件是o.field>10)从列表lst中的对象中找到int字段field的值之和 int sum = lst.stream().filter(o -> o.field > 10).mapToInt(o -> o.field).sum(); 尝试: 你能行 int sum =

假设有一个类Obj

class Obj{

  int field;
}
您有一个
Obj
实例列表,即
list lst

现在,在Java8 with streams中,如何在过滤条件下(例如,对于对象
o
,条件是
o.field>10
)从列表
lst
中的对象中找到int字段
field
的值之和

int sum = lst.stream().filter(o -> o.field > 10).mapToInt(o -> o.field).sum();
尝试:

你能行

int sum = lst.stream().filter(o -> o.getField() > 10).mapToInt(o -> o.getField()).sum();
或(使用方法参考)

你能行

int sum = lst.stream().filter(o -> o.getField() > 10).mapToInt(o -> o.getField()).sum();
或(使用方法参考)

你可以试试

int sum = list.stream().filter(o->o.field>10).mapToInt(o->o.field).sum();
如图所示

您可以尝试

int sum = list.stream().filter(o->o.field>10).mapToInt(o->o.field).sum();

如图所示

您还可以使用适当的求和采集器收集,如

返回生成整数值函数和的
收集器
应用于输入元素。如果不存在任何元素,则返回结果 是0

比如说

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

您还可以使用适当的求和收集器
收集
,如

返回生成整数值函数和的
收集器
应用于输入元素。如果不存在任何元素,则返回结果 是0

比如说

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

在Java 8中,对于具有
字段和getField()方法的
Obj
实体,您可以使用:

List<Obj> objs ...

Stream<Obj> notNullObjs =
  objs.stream().filter(obj -> obj.getValue() != null);

Double sum = notNullObjs.mapToDouble(Obj::getField).sum();
列出对象。。。
流NOTNULOBJS=
objs.stream().filter(obj->obj.getValue()!=null);
Double sum=notNullObjs.mapToDouble(Obj::getField.sum();

在Java 8中,对于具有
字段和getField()方法的
Obj
实体,您可以使用:

List<Obj> objs ...

Stream<Obj> notNullObjs =
  objs.stream().filter(obj -> obj.getValue() != null);

Double sum = notNullObjs.mapToDouble(Obj::getField).sum();
列出对象。。。
流NOTNULOBJS=
objs.stream().filter(obj->obj.getValue()!=null);
Double sum=notNullObjs.mapToDouble(Obj::getField.sum();
您可以使用以下方法:“IntSummaryStatistics”

可以使用以下方法:“IntSummaryStatistics”


或者
intsum=lst.stream().mapToInt(Obj::getField).filter(n->n>10.sum()
intsum=lst.stream().mapToInt(Obj::getField).filter(n->n>10.sum()这个答案给主题增加了什么?在问题的任何地方都没有提到
指标
,所有答案都已经非常具体。因此,除非你能编辑你的答案,为手头的主题添加一些有用的东西,否则我建议你删除它。更改名称以帮助Olivier的抽象思维。这个答案为主题添加了什么?在问题的任何地方都没有提到
指标
,所有答案都已经非常具体。因此,除非你能编辑你的答案,为手头的主题添加一些有用的东西,否则我建议你删除它。更改名称以帮助奥利维尔的抽象思维。