【问题标题】:How to filter two maps and make third map by using Lamda expression java 8如何使用 Lambda 表达式 java 8 过滤两个映射并制作第三个映射
【发布时间】:2020-01-14 17:17:18
【问题描述】:
Map<String,String> persons = new HashMap<>();
persons.put("aaaa@testing","123456789");
persons.put("bbbb@testing","987654321");

Map<String,UsersDTO> users = new HashMap<>();
users.put("aaaa@testing", UsersDTO1);
users.put("bbbb@testing",UsersDTO2);

//Below one is the my required final map by using above two maps by using java 8 Lambdas
Map<String,UsersDTO> finalMap = new HashMap<>();
finalMap.put("123456789",UsersDTO1);
finalMap.put("987654321",UsersDTO2);

如何使用以上两张地图制作finalMap?这类问题可能存在,但我想特别关注这一点,这就是我发布它的原因。如何使用 lambda 表达式制作?

【问题讨论】:

  • 您希望您的最终地图为&lt;String,String&gt;,但您却将UserDtos 放入其中?
  • 抱歉打错了,最后我想要 泛型类型映射

标签: java collections java-8 hashmap java-stream


【解决方案1】:

你可以这样做,但请注意你会得到一个Map&lt;String,UserDto&gt;

Map<String,UsersDTO> finalMap =
        persons.entrySet().stream()
                .collect(Collectors.toMap(Map.Entry::getValue, e-> users.get(e.getKey())));

正如 Andreas 所建议的,如果电子邮件在两个地图之间没有匹配,您可以处理这种情况。例如忽略条目:

Map<String, UsersDTO> finalMap =
        persons.entrySet().stream()
                .filter(e -> users.containsKey(e.getKey()))
                .collect(Collectors.toMap(Map.Entry::getValue, e -> users.get(e.getKey())));

【讨论】:

  • 您缺少一个 filter() 调用来排除 persons 条目而没有匹配 users 条目。
  • 确实。但不确定操作将如何处理(过滤、默认值、异常),但无论如何添加了一个过滤示例。
【解决方案2】:

我认为你的意思是这样的:

Map<String, UsersDTO> finalMap = users.entrySet().stream()
        .collect(Collectors.toMap(user -> persons.get(user.getKey()), Map.Entry::getValue));

这是一个简单的ideone demo 预期结果。


正如 Andreas 所说,您需要另一个过滤器来确保每个条目都有匹配:

Map<String, UsersDTO> finalMap = users.entrySet().stream()
        .filter(user -> persons.containsKey(user.getKey()))
        .collect(Collectors.toMap(user -> persons.get(user.getKey()), Map.Entry::getValue));

【讨论】:

  • 您缺少一个 filter() 调用来排除 users 条目而没有匹配 persons 条目。
  • @Andreas 你是对的,没有过滤器可能会导致一些问题。修复它;)
  • 可以请建议我在哪里可以学习这个复杂的 lamdas,建议我任何学习资源
  • @SrikanthJanapati 通过练习和学习书籍,例如 amazon.fr/Java-Lambdas-Pragmatic-Functional-Programming-ebook/…
  • @YCF_L 谢谢
猜你喜欢
  • 2015-07-05
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 2018-12-22
  • 2022-01-15
  • 1970-01-01
  • 2021-10-28
  • 2023-01-24
相关资源
最近更新 更多