iterating and filtering two lists using java 8

后端 未结 9 503
抹茶落季
抹茶落季 2020-12-09 17:21

I want to iterate two lists and get new filtered list which will have values not present in second list. Can anyone help?

I have two lists - one is list of strings,

9条回答
  •  庸人自扰
    2020-12-09 17:39

    @DSchmdit answer worked for me. I would like to add on that. So my requirement was to filter a file based on some configurations stored in the table. The file is first retrieved and collected as list of dtos. I receive the configurations from the db and store it as another list. This is how I made the filtering work with streams

        List modelList = Files
                .lines(Paths.get("src/main/resources/rootFiles/XXXXX.txt")).parallel().parallel()
                .map(line -> {
                    FileModel fileModel= new FileModel();
                    line = line.trim();
                    if (line != null && !line.isEmpty()) {
                        System.out.println("line" + line);
                        fileModel.setPlanId(Long.parseLong(line.substring(0, 5)));
                        fileModel.setDivisionList(line.substring(15, 30));
                        fileModel.setRegionList(line.substring(31, 50));
                        Map newMap = new HashedMap<>();
                        newMap.put("other", line.substring(51, 80));
                        fileModel.setOtherDetailsMap(newMap);
    
                    }
                    return fileModel;
                }).collect(Collectors.toList());
    
        for (FileModel model : modelList) {
            System.out.println("model:" + model);
        }
    
        DbConfigModelList respList = populate();
        System.out.println("after populate");
        List respModelList = respList.getFeedbackResponseList();
    
    
        Predicate somePre = s -> respModelList.stream().anyMatch(respitem -> {
    
            System.out.println("sinde respitem:"+respitem.getPrimaryConfig().getPlanId());
            System.out.println("s.getPlanid()"+s.getPlanId());
            System.out.println("s.getPlanId() == respitem.getPrimaryConfig().getPlanId():"+
            (s.getPlanId().compareTo(respitem.getPrimaryConfig().getPlanId())));
            return s.getPlanId().compareTo(respitem.getPrimaryConfig().getPlanId()) == 0
                    && (s.getSsnId() != null);
        });
    
    
    
     final List finalList =  modelList.stream().parallel().filter(somePre).collect(Collectors.toList());
    
     finalList.stream().forEach(item -> {
         System.out.println("filtered item is:"+item);
     });
    

    The details are in the implementation of filter predicates. This proves much more perfomant over iterating over loops and filtering out

提交回复
热议问题