【发布时间】:2018-01-16 03:59:50
【问题描述】:
我试图通过获取值大于 0 的 HashMap 的所有键来创建 HashSet。为此,我考虑了 Java Streams,它带有 Collectors,但没有成功。我获得成功的唯一方法是使用带有 if 语句的 forEach 循环,如下代码所述:
HashMap<Integer, Double> profiencyOnSkill;
HashSet<Integer> skills;
profiencyOnSkill.put(1, 0.5);
profiencyOnSkill.put(2, 0.0);
profiencyOnSkill.put(3, 1.0);
profiencyOnSkill.put(4, 0.02);
profiencyOnSkill.put(5, 0.0);
profiencyOnSkill
.entrySet()
.stream()
.forEach(pair -> {
if (pair.getValue() > 0.0) {
skills.add(pair.getKey());
}
});
skills.forEach(System.out::println);
有没有直接的方法来处理收集器?我对 Collectors 的所有想法都返回了Map.Entry<Integer, Double>。类似的东西:
Set<Map.Entry<Integer, Double>> someSet = proficiencyOnSkill.entrySet().stream().filter(x-> x.getValue() == 2).collect(Collectors.toSet());
【问题讨论】:
-
我试图通过获取值大于 0 的 HashMap 的所有 条目 来创建 HashSet。 你是说键吗?如果是这样,只需在收集之前添加
.map(Map.Entry::getKey)。 -
@shmosel 是的,正如您所指出的,正确的是键。现已编辑。
标签: java collections java-8 java-stream