stream让你抛弃嵌套遍历匹配

场景:

有如下两个List:

//花名册
List<Map<String,String>> personList = new ArrayList<>();
personList.add(new HashMap<String,String>(){{put("name","张一");put("age","18");put("sex","男");}});
personList.add(new HashMap<String,String>(){{put("name","张二");put("age","19");put("sex","女");}});
personList.add(new HashMap<String,String>(){{put("name","张三");put("age","20");put("sex","男");}});
personList.add(new HashMap<String,String>(){{put("name","张四");put("age","21");put("sex","女");}});
personList.add(new HashMap<String,String>(){{put("name","张五");put("age","22");put("sex","男");}});
        
//通讯录
List<Map<String,String>> phoneList = new ArrayList<>();
phoneList.add(new HashMap<String,String>(){{put("name","张一");put("phone","13313313313");}});
phoneList.add(new HashMap<String,String>(){{put("name","张二");put("phone","12212212212");}});
phoneList.add(new HashMap<String,String>(){{put("name","张三");put("phone","14414414414");}});
phoneList.add(new HashMap<String,String>(){{put("name","张四");put("phone","15515515515");}});
phoneList.add(new HashMap<String,String>(){{put("name","张五");put("phone","16616616616");}});

需要将通讯录中phone值添加到花名册中

传统手艺:首先遍历花名册,花名册中嵌套遍历通讯录,嵌套遍历中判断name相等在personList中添加phone。。。。。。。。虽然功能实现了,但是很羞耻

尝试使用stream

        List<Map<String, String>> collect = personList.stream().map(l1 ->
                        phoneList.stream()
                        .filter(l2 ->l1.get("name").equals(l2.get("name")))
                        .findFirst()
                        .map(l2 -> {
                            l1.put("phone", l2.get("phone"));
                            return l1;
                        })
                        .orElse(l1))
                .collect(Collectors.toList());
        collect.stream().forEach(System.out::println);

输出内容:

{phone=13313313313, sex=男, name=张一, age=18}
{phone=12212212212, sex=女, name=张二, age=19}
{phone=14414414414, sex=男, name=张三, age=20}
{phone=15515515515, sex=女, name=张四, age=21}
{phone=16616616616, sex=男, name=张五, age=22}

优雅~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值