我正在寻找第一次使用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)
| 归档时间: |
|
| 查看次数: |
5118 次 |
| 最近记录: |