2014-03-26 65 views
7

我正在首次尋找Java 8的Stream API。我試圖創建一個過濾器以從Map中移除元素。如何在Java 8 Stream API中使用Collectors.grouping創建地圖

這是我的地圖:

Map<String, Integer> m = new HashMap<>(); 

我想與價值<刪除條目=大於0所以我想申請一個過濾器,並取回一個新的地圖(地圖<字符串,整數>)。

這是我一直在努力:

m.entrySet().stream().filter(p -> p.getValue() > 0).collect(Collectors.groupingBy(s -> s.getKey()));  

我得到一個HashMap <字符串,ArrayList的<的HashMap $節點> >。所以,不是我想要的。

我也試過:

m.entrySet().stream().filter(p -> p.getValue() > 0).collect(Collectors.groupingBy(Map::Entry::getKey, Map::Entry::getValue)); 

,這將導致:

// Error:(50, 132) java: method reference not expected here 

基本上我不知道如何建立我的新地圖的值。

這是javadoc of Collectors,他們寫了幾個grouping的例子,但是我一直沒能得到它的工作。

那麼,我應該如何編寫collect來讓我的地圖按我想要的方式構建?

回答

11

你不需要組流項目再次,他們已經在「映射」 - 你只需要收集他們:

m.entrySet().stream() 
    .filter(p -> p.getValue() > 0) 
    .collect(toMap(Entry::getKey, Entry::getValue)); 

進口:

import java.util.Map.Entry; 
import static java.util.stream.Collectors.toMap;