为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Lambda 表达式 java 8 过滤两个映射并制作第三个映射

如何使用 Lambda 表达式 java 8 过滤两个映射并制作第三个映射

森栏 2023-07-28 10:04:59
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 LambdasMap<String,UsersDTO> finalMap = new HashMap<>();finalMap.put("123456789",UsersDTO1);finalMap.put("987654321",UsersDTO2);如何finalMap利用上面两张图来制作呢?可能存在此类问题,但我想特别关注这一点,所以这就是我发布它的原因。如何使用 lambda 表达式进行生成?
查看完整描述

2 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

您可以这样做,但请注意您将得到Map<String,UserDto>:


Map<String,UsersDTO> finalMap =

        persons.entrySet().stream()

                .collect(Collectors.toMap(Map.Entry::getValue, e-> users.get(e.getKey())));

如果电子邮件中的两个地图之间不匹配,您可以处理这种情况。例如,通过忽略条目:


Map<String, UsersDTO> finalMap =

        persons.entrySet().stream()

                .filter(e -> users.containsKey(e.getKey()))

                .collect(Collectors.toMap(Map.Entry::getValue, e -> users.get(e.getKey())));



查看完整回答
反对 回复 2023-07-28
?
慕斯709654

TA贡献1840条经验 获得超5个赞

我想你的意思是这样的:

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

您需要另一个过滤器来确保每个条目都有匹配的:

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


查看完整回答
反对 回复 2023-07-28
  • 2 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信