场景:
有如下两个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}
优雅~~~