2014-04-16 35 views
24

和值有一類的OBJJava8:從對象的特定字段設列表

class Obj{ 

    int field; 
} 

,並且您有Obj實例的列表,即List<Obj> lst

現在,我怎樣才能找到在Java8與流從以列表lst對象的int字段field的值的總和的過濾準則下(例如,對於一個對象o,準則是o.field > 10)?

回答

60

你可以做

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(); 
+0

的最佳答案之一.. –

+0

或'INT總和= lst.stream()。mapToInt(的OBJ :: getField).filter(n - > n> 10).sum();' – 4castle

3

嘗試:

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

您可以嘗試

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

像解釋here

3

您也可以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)); 
相關問題