如何在Java 8 Stream API中使用Collectors.grouping来创建Map

Rau*_*uiu 7 java java-stream

我正在寻找第一次使用Java 8的Stream API.我尝试创建一个过滤器来从Map中删除元素.

这是我的地图:

Map<String, Integer> m = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

我想删除值<= 0的条目.所以我想应用一个过滤器并返回一个新的映射(Map <String,Integer>).

这就是我一直在尝试的:

m.entrySet().stream().filter( p -> p.getValue() > 0).collect(Collectors.groupingBy(s -> s.getKey()));    
Run Code Online (Sandbox Code Playgroud)

我得到一个HashMap <String,ArrayList <HashMap $ Node >>.所以,不是我想要的.

我也尝试过:

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

这导致:

// Error:(50, 132) java: method reference not expected here
Run Code Online (Sandbox Code Playgroud)

基本上我不知道如何构建我的新Map的值.

这是收藏家javadoc,他们写了几个分组的例子,但我无法让它工作.

那么,我应该如何编写收集来按我的意愿构建我的Map?

ass*_*ias 11

您不需要再次对流项目进行分组,它们已经"映射" - 您只需要收集它们:

m.entrySet().stream()
    .filter(p -> p.getValue() > 0)
    .collect(toMap(Entry::getKey, Entry::getValue));
Run Code Online (Sandbox Code Playgroud)

进口:

import java.util.Map.Entry;
import static java.util.stream.Collectors.toMap;
Run Code Online (Sandbox Code Playgroud)