【问题标题】:Print HashMap Values with Stream api使用 Stream api 打印 HashMap 值
【发布时间】:2017-05-24 21:04:24
【问题描述】:
HashMap<String, Double> missions = new HashMap<>();
missions.put("name", 1.0);
missions.put("name1", 2.0);
missions.keySet().stream().forEach(el-> System.out.println(el));

这仅打印键,我如何打印地图的值?

【问题讨论】:

  • 什么?............

标签: java api stream hashmap


【解决方案1】:

使用entrySet()(或values(),如果你需要的话)而不是keySet()

Map<String, Double> missions = new HashMap<>();
missions.put("name", 1.0);
missions.put("name1", 2.0);
missions.entrySet().stream().forEach(e-> System.out.println(e));

【讨论】:

  • 您可以直接传递方法引用而不是创建 lambda:forEach(System.out::println)。不过,这只是风格问题。
  • 是的,但在这种情况下,我不确定 OP 想要的是价值还是入口——如果是后者,那么 lambda 将是一个更好的选择(因为您可能想从Entry).
  • 我只是理解它背后的逻辑。它也与现有的 Java API 保持一致。
  • 另外,最好是program to an interface,比如Map&lt;String, Double&gt; missions = new HashMap&lt;&gt;();
  • @ΔλЛ IDK,键 => keySet(),值 => values(),两者 => entrySet();不影响forEach。但正如我所说,这是一种风格——只是想提一下。
【解决方案2】:
HashMap<String, Double> missions = new HashMap<>();
missions.put("name", 1.0);
missions.put("name1", 2.0);
missions.entrySet().forEach(System.out::println);

输出:

name=1.0
name1=2.0

【讨论】:

  • 100% 同意你的看法。我的想法是,既然问题已经得到解答,我的回答将有助于寻找解决方案的人轻松找到答案。但我同意你的观点,我从你那里学到了一些东西,谢谢。
【解决方案3】:
// Stores the values in a list which can later used

missions.values().stream().collect(Collectors.toList());

//print it to standard op

missions.values().forEach(val -> System.out.println(val));

【讨论】:

  • 请阅读How to Answer 并避免只回答代码。相反,请记住,您不仅要回答 OP,还要回答任何未来的读者(尤其是在回答 3 岁问题时)。因此,请edit 回答包含关于为什么此代码有效的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
相关资源
最近更新 更多