【问题标题】:Filter Map based on condition in Java在Java中根据条件过滤地图
【发布时间】:2020-02-29 07:14:16
【问题描述】:

我有一个地图对象

public class Employee {
    private int id;
    private String name;
    private String designation; 
}

Map<Integer, Employee> map = new HashMap<Integer, Employee>();

我想根据 Employee 中的一个属性过滤地图,该属性应该与用户输入的给定属性相匹配,比如 userName。

我正在使用

public List<Employee> getEmployeesByName(String userName) {
    map.entrySet().stream().filter(e-> e.getValue().getName().equals(userName)).collect(Collectors.toList());
}

我想要List&lt;Employee&gt; 格式的输出。我不明白为什么它的格式是List&lt;Entry&lt;Integer, Employee&gt;&gt;。我在这里错过了什么?

【问题讨论】:

  • 请提供minimal reproducible example,说明您尝试过的内容。我们应该能够复制代码并按原样运行而不添加任何内容。这意味着您至少应该有一个带有main() 的类,就像任何独立的Java 程序一样。然后显示你得到的输出并描述你想要的输出。
  • 应该是.collect(Collectors.toList())
  • 我已经更正了
  • e-&gt; e.getValue().getName() == userName 更改为 e-&gt; e.getValue().getName().equals(userName)

标签: java hashmap


【解决方案1】:

您似乎正在流式传输Map.Entrys,但只是想要这些值。将map.stream()(不应该工作)更改为map.values().stream()

【讨论】:

  • 要添加到此,map.stream() 是不可能的。编辑:编辑后,他现在需要用map.values()替换map.entrySet()
  • @curiousdev 是的,这么想,必须去检查。
猜你喜欢
  • 2015-01-21
  • 2012-06-28
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多