温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java8中怎么用Lambda遍历两个List匹配数据

发布时间:2022-03-02 16:50:53 来源:亿速云 阅读:1295 作者:iii 栏目:开发技术

这篇“Java8中怎么用Lambda遍历两个List匹配数据”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java8中怎么用Lambda遍历两个List匹配数据”文章吧。

    Lambda遍历两个List匹配数据

    1. 定义一个静态方法

    /**
         *  通过遍历两个List中按id属性相等的归结到resultList中
         * @param oneList
         * @param twoList
         */
        public static List<Map<Object, Object>> compareListHitData(List<Map<Object, Object>> oneList, List<Map<Object, Object>> twoList) {
            List<Map<Object, Object>> resultList = oneList.stream().map(map -> twoList.stream()
                    .filter(m -> Objects.equals(m.get("id"), map.get("id")))
                    .findFirst().map(m -> {
                        map.putAll(m);
                        return map;
                    }).orElse(null))
                    .filter(Objects::nonNull).collect(Collectors.toList());
            return resultList;
        }

    2. Main方法测试

    public static void main(String[] args) {
            List<Map<Object, Object>> oneList = new ArrayList<>();
            Map<Object, Object> oneMap = new HashMap<>();
            oneMap.put("id", 111);
            oneMap.put("userName", "何金荣");
            Map<Object, Object> twoMap = new HashMap<>();
            twoMap.put("id", 222);
            twoMap.put("userName", "Hejinrong");
            oneList.add(oneMap);
            oneList.add(twoMap);
            List<Map<Object, Object>> twoList = new ArrayList<>();
            Map<Object, Object> threeMap = new HashMap<>();
            threeMap.put("id", 111);
            threeMap.put("userName", "何金荣");
            Map<Object, Object> fourMap = new HashMap<>();
            fourMap.put("id", 333);
            fourMap.put("userName", "Hejinrong");
            twoList.add(threeMap);
            twoList.add(fourMap);
            List<Map<Object, Object>> resultList = compareListHitData(oneList, twoList);
            System.out.println(resultList);
        }

    3. 输出结果

    Java8中怎么用Lambda遍历两个List匹配数据

    jdk1.8的stream对两个List遍历匹配数据的处理

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Objects;
    import java.util.stream.Collectors;
     
    public class testStream {
        public static void main(String[] args) {
            List<AwardInfo> prizeRecords = new ArrayList<AwardInfo>(6);
            List<StockInfo> stockDTOList = new ArrayList<StockInfo>();
            for (int i = 0; i < 6; i++) {
                AwardInfo AwardInfo = new AwardInfo();
                AwardInfo.setStockNo((i+1)+"");
                prizeRecords.add(AwardInfo);
            }
            for (int i = 0; i < 3; i++) {
                StockInfo stockDTO = new StockInfo();
                stockDTO.setStockNo((i+1)+"");
                stockDTO.setThirdStockNo("third"+(i+1));
                stockDTOList.add(stockDTO);
            }
            StockInfo stockDTO1 = new StockInfo();
            stockDTO1.setStockNo((44)+"");
            stockDTO1.setThirdStockNo("third"+44);
            stockDTOList.add(stockDTO1);
     
            StockInfo stockDTO2 = new StockInfo();
            stockDTO2.setStockNo((55)+"");
            stockDTO2.setThirdStockNo("third"+55);
            stockDTOList.add(stockDTO2);
     
            //prizeRecords与stockDTOList求差集
            List<AwardInfo> resultList1 = prizeRecords.stream()
                    .map(map -> stockDTOList.stream()
                            .filter(m -> !Objects.equals(m.getStockNo(), map.getStockNo()))
                            .findFirst().map(m -> {
                                return map;
                            }).orElse(null))
                    .filter(Objects::nonNull).collect(Collectors.toList());
            /**
             * 求差集:失败结果参考
             * [AwardInfo{userId='null', stockNo='1', thirdStockNo='null'},
             * AwardInfo{userId='null', stockNo='2', thirdStockNo='null'},
             * AwardInfo{userId='null', stockNo='3', thirdStockNo='null'},
             * AwardInfo{userId='null', stockNo='4', thirdStockNo='null'},
             * AwardInfo{userId='null', stockNo='5', thirdStockNo='null'},
             * AwardInfo{userId='null', stockNo='6', thirdStockNo='null'}]
             */
            System.out.println(resultList1.toString());
     
     
           /* List<AwardInfo> list2 = prizeRecords.stream()
                    .filter(map -> stockDTOList.stream().anyMatch(map1 -> map.getStockNo().equals(map1.getStockNo())))
                    .forEach(map -> {
                        map.setThirdStockNo(map1.getThirdStockNo());
                    });*/
            List<AwardInfo> resultList2 = prizeRecords.stream().map(m->{
                stockDTOList.stream().filter(m2->Objects.equals(m.getStockNo(), m2.getStockNo()))
                        .forEach(s-> m.setThirdStockNo(s.getThirdStockNo()));
                return m;
            }).collect(Collectors.toList());
            /**
             * stockNo=4,5,6的结果没去掉!
             * [AwardInfo{userId='null', stockNo='1', thirdStockNo='third1'},
             * AwardInfo{userId='null', stockNo='2', thirdStockNo='third2'},
             * AwardInfo{userId='null', stockNo='3', thirdStockNo='third3'},
             * AwardInfo{userId='null', stockNo='4', thirdStockNo='null'},
             * AwardInfo{userId='null', stockNo='5', thirdStockNo='null'},
             * AwardInfo{userId='null', stockNo='6', thirdStockNo='null'}]
             */
            System.out.println(resultList2.toString());
     
            List<AwardInfo> list3 = prizeRecords.stream()
                    .map(map -> stockDTOList.stream()
                            .filter(m -> Objects.equals(m.getStockNo(), map.getStockNo()))
                            .findFirst().map(m -> {
                                map.setThirdStockNo(m.getThirdStockNo());
                                return map;
                            }).orElse(null))
                    .filter(Objects::nonNull).collect(Collectors.toList());
            /**
             * stockNo=4,5,6的结果已去掉
             * [AwardInfo{userId='null', stockNo='1', thirdStockNo='third1'},
             * AwardInfo{userId='null', stockNo='2', thirdStockNo='third2'},
             * AwardInfo{userId='null', stockNo='3', thirdStockNo='third3'}]
             */
            System.out.println(list3.toString());
        }
        static class StockInfo{
            private String stockNo;
            private String stockName;
            private String thirdStockNo; 
            public String getStockNo() {
                return stockNo;
            }
     
            public void setStockNo(String stockNo) {
                this.stockNo = stockNo;
            }
     
            public String getStockName() {
                return stockName;
            }
     
            public void setStockName(String stockName) {
                this.stockName = stockName;
            }
     
            public String getThirdStockNo() {
                return thirdStockNo;
            }
     
            public void setThirdStockNo(String thirdStockNo) {
                this.thirdStockNo = thirdStockNo;
            }
     
            @Override
            public String toString() {
                return "StockInfo{" +
                        "stockNo='" + stockNo + '\'' +
                        ", stockName='" + stockName + '\'' +
                        ", thirdStockNo='" + thirdStockNo + '\'' +
                        '}';
            }
        }
        static class AwardInfo{       
            private String userId;       
            private String stockNo;        
            private String thirdStockNo; 
            public String getUserId() {
                return userId;
            }
     
            public void setUserId(String userId) {
                this.userId = userId;
            }
     
            public String getStockNo() {
                return stockNo;
            }
     
            public void setStockNo(String stockNo) {
                this.stockNo = stockNo;
            }
     
            public String getThirdStockNo() {
                return thirdStockNo;
            }
     
            public void setThirdStockNo(String thirdStockNo) {
                this.thirdStockNo = thirdStockNo;
            }
     
            @Override
            public String toString() {
                return "AwardInfo{" +
                        "userId='" + userId + '\'' +
                        ", stockNo='" + stockNo + '\'' +
                        ", thirdStockNo='" + thirdStockNo + '\'' +
                        '}';
            }
        }
    }

    以上就是关于“Java8中怎么用Lambda遍历两个List匹配数据”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI