gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:59:44 25 4
gpt4 key购买 nike

我有两个类型为 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中满足休假条件的所有记录如果(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

最佳答案

您正在过滤器谓词中寻找内部 anyMatch 作为:

public List<Term> getFilteredRowNum(List<Term> termList1, List<Term> termList2) {
return termList1.stream()
.filter(term1 -> termList2.stream()
.anyMatch(term2 -> term1.getSId() == term2.getSId()
&& term1.getPsid() != term2.getPsid()))
.collect(Collectors.toList());
}

另一种解决方法是创建 sidMappsidSet使用 groupingBymapping

出现在任何列表中
Map<Long, Set<Long>> sIdToPsIdsMap = termList2.stream()
.collect(Collectors.groupingBy(Term::getSId,
Collectors.mapping(Term::getPsid, Collectors.toSet())));

并进一步将其用于 filter 条件作为

return termList1.stream()
.filter(term1 -> sIdToPsIdsMap.containsKey(term1.getSId())
&& !sIdToPsIdsMap.get(term1.getSId()).contains(term1.getPsid()))
.collect(Collectors.toList());

关于java - 如何使用 java 流比较两个 ArrayList 并使用过滤器获取 list1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57194591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com