和值有一類的OBJJava8:從對象的特定字段設列表
class Obj{
int field;
}
,並且您有Obj
實例的列表,即List<Obj> lst
。
現在,我怎樣才能找到在Java8與流從以列表lst
對象的int字段field
的值的總和的過濾準則下(例如,對於一個對象o
,準則是o.field > 10
)?
和值有一類的OBJJava8:從對象的特定字段設列表
class Obj{
int field;
}
,並且您有Obj
實例的列表,即List<Obj> lst
。
現在,我怎樣才能找到在Java8與流從以列表lst
對象的int字段field
的值的總和的過濾準則下(例如,對於一個對象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();
嘗試:
int sum = lst.stream().filter(o -> o.field > 10).mapToInt(o -> o.field).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));
的最佳答案之一.. –
或'INT總和= lst.stream()。mapToInt(的OBJ :: getField).filter(n - > n> 10).sum();' – 4castle