【目标】:对两个集合中的元素通过特定指标进行匹配,重新组合匹配成功的元素。(如下图:)
【说明】:对两个集合 listA、listB 依据 field1 字段进行匹配,若匹配成功,则取出 listA 中的 field0、field1 和 listB 中的 field2 组合成新元素;多个匹配项形成新的 list:commonList.
【关键】:java8 Stream处理: list.stream().*其他操作*().flatMap() 实现合并。
【关键代码示例】:
【完整代码示例】:
1 @Data 2 class User{ 3 public User() { 4 } 5 public User(String userName, int age) { 6 this.userName = userName; 7 this.age = age; 8 } 9 public User(String userName, int age, String info) { 10 this.userName = userName; 11 this.age = age; 12 this.info = info; 13 } 14 15 private String userName; 16 private int age; 17 private String info; 18 } 19 20 @Test 21 public void test(){ 22 List<User> userListA = Arrays.asList( 23 new User("关羽", 666), 24 new User("赵云", 666), 25 new User("张飞", 666), 26 new User("刘备", 666)); 27 List<User> userListB = Arrays.asList( 28 new User("关羽", 999, "武财神"), 29 new User("关云长", 999, "忠义"), 30 new User("关公", 999, "汉寿亭侯"), 31 new User("赵子龙", 999, "永昌亭侯")); 32 33 List<String> commonList = userListA.stream() 34 .map((uA) -> { 35 return userListB.stream() 36 .filter((uB) -> { 37 return StringUtils.equals(uB.getUserName(), uA.getUserName()); 38 }) 39 .map((uB) -> { 40 return uB.getUserName() + "_" + uA.age + "_" +uB.getInfo(); 41 }) 42 .collect(Collectors.toList()); 43 }) // 结果类型 Steam<List<String>> 44 .flatMap(List::stream) // 结果类型 Steam<String> 45 .collect(Collectors.toList()); // 结果类型 List<String> 46 47 System.out.println(JsonUtils.objectToJson(commonList)); // ["关羽_666_武财神"] 48 } 49 }
对两个List进行关联匹配,选择匹配上的记录形成新的List输出
原文:https://www.cnblogs.com/bridgestone29-08/p/13485180.html