首页 > 其他 > 详细

对两个List进行关联匹配,选择匹配上的记录形成新的List输出

时间:2020-08-11 22:11:22      阅读:153      评论:0      收藏:0      [点我收藏+]

Java 8 Stream Convert  Stream<List<String>> to List<String>

【目标】:对两个集合中的元素通过特定指标进行匹配,重新组合匹配成功的元素。(如下图:)

【说明】:对两个集合 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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!