当前位置: 首页 > 知识库问答 >
问题:

如何在Java8流API中使用Collectors.Grouping创建映射

臧友樵
2023-03-14

我正在寻找第一次到流API的Java8。我尝试创建一个筛选器来从映射中删除元素。

Map<String, Integer> m = new HashMap<>();
m.entrySet().stream().filter( p -> p.getValue() > 0).collect(Collectors.groupingBy(s -> s.getKey()));    
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

共有1个答案

狄宾实
2023-03-14

您不需要再次对流项进行分组,它们已经被“映射”了--您只需要将它们收集起来:

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;
 类似资料:
  • 我有一个,另一个作为参数 我想创建一个按类型返回的方法 通常我会写 用java stream写的最佳做法是什么?

  • 我该怎么解决这个烂摊子? 提前致谢

  • 问题内容: 我想要初始化a,并希望始终从流外部输入相同的值。 但是Java抱怨如下: 收集器类型中的toMap(Function,Function)方法不适用于参数(Function,BigDecimal) 为什么不能从外部使用BigDecimal?如果我写: 它会起作用,但这当然不是我想要的。 问题答案: 的第二个参数(如第一个参数)是一个函数,它接受流元素并返回映射的值。 在这种情况下,您想忽

  • 我有一个这样的文本文件: ids.txt 我想读取这个文件并加载到二维数组中。我希望有一个类似于下面的数组: 如何解决此异常?

  • 我有以下枚举: 我想用和null值中的键创建映射。我试着按照这个答案下面的代码: 但我在这里得到的是。我做错了什么?

  • 是否可以从迭代器创建一个流,其中对象的序列与通过反复调用迭代器的next()方法生成的序列相同?我所考虑的具体情况涉及到Treeset.desceningIterator()返回的迭代器的使用,但是我可以想象在其他情况下,迭代器是可用的,而不是它所引用的集合。 例如,对于,我们可以编写并按照该集合的排序顺序获取该集合中的对象流,但是如果我们希望它们按照不同的顺序,比如通过使用获得的顺序呢?我想象的