2017-03-29 73 views
2

我有一組對象。我想根據某些標準對其進行過濾,即符合條件的標準,我想執行一些操作&然後再做一些映射。無法解析方法'映射'Java 8 Lambda

Set<Tasks> v1; 
Map<V, Long> vC = v1.stream() 
       .filter(t -> someCondition(t)) 
       //for these filtered operations perform some action 
       .forEach(t -> t.performAction(summation(t)) 
       .map(t->summation(t)) 
       .collect(groupingBy(identity(), counting())); 

我在地圖上得到一個錯誤無法解析方法'地圖'。如果我刪除forEach它的作品。我知道每一個都是終端操作,但我想不出替代方案。

回答

3

您可以使用peek操作來實現你想要的:

Map<V, Long> vC = v1.stream() 
    .filter(t -> someCondition(t)) 
    .peek(t -> t.performAction(summation(t)) 
    .map(t->summation(t)) 
    .collect(groupingBy(identity(), counting())); 
+2

......和[強制性鏈接](http://stackoverflow.com/q/33635717/2711488)。除此之外,這個代碼計算'summation(t)'兩次,這是一個替代解決方案大喊... – Holger