如何使用 java 流比较两个 ArrayList 并使用过滤器获取 list1

我有两个类型为 List 的列表 list1 和 list2


Term{

long sId;

int rowNum;

long psid;

String name;

}


List<Term> list1 = new ArrayList<>();

List<Term> list2 = new ArrayList<>();

我想返回 list1 中的所有项目,其中 (list1.psid != list2.psid)。


我试过了,但没用


public List<Term> getFilteredRowNum(List<Term> list1, List<Term> list2) {

        List<Long> psid = list2.stream().map(x -> x.getPsid()).collect(Collectors.toList());


        return list1.stream().filter(x -> !psid.contains(x.getPsid())).map(x -> x.getRowNum()+1).collect(Collectors.toList());


    }

我想获取 list1 中满足休闲条件的所有记录 if(list1.psid != list2.psid)


Sample Date:

List1: rowNum     psId    name    sid

       1         1288     home    101

       1         9012     home    101

       2         1296     office  150

       3         1290     park    161


List2: rowNum     psId    name    sid

       1          9012    home    101

       2         1296     office  150

       3         1290     park    161


List1 psId not in list2 so I am expecting fallowing list as result from list1


Expected: List1

 rowNum     psId    name    sid

 1         1288     home    101


慕哥9229398
浏览 110回答 1
1回答

蛊毒传说

anyMatch您正在过滤器谓词中寻找一个内部作为:public&nbsp;List<Term>&nbsp;getFilteredRowNum(List<Term>&nbsp;termList1,&nbsp;List<Term>&nbsp;termList2)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;termList1.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(term1&nbsp;->&nbsp;termList2.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.anyMatch(term2&nbsp;->&nbsp;term1.getSId()&nbsp;==&nbsp;term2.getSId() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&&&nbsp;term1.getPsid()&nbsp;!=&nbsp;term2.getPsid())) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toList()); }解决该问题的另一种方法是使用和创建出现在任何列表中的一个Mapofsid到一个SetofpsidgroupingBymappingMap<Long,&nbsp;Set<Long>>&nbsp;sIdToPsIdsMap&nbsp;=&nbsp;termList2.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.groupingBy(Term::getSId,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Collectors.mapping(Term::getPsid,&nbsp;Collectors.toSet())));并进一步将其用于filter以下条件return&nbsp;termList1.stream() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.filter(term1&nbsp;->&nbsp;sIdToPsIdsMap.containsKey(term1.getSId()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&&&nbsp;!sIdToPsIdsMap.get(term1.getSId()).contains(term1.getPsid())) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toList());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java