第二个列表中非';在java中,t位于第一个列表中

第二个列表中非';在java中,t位于第一个列表中,java,collections,java-8,java-stream,Java,Collections,Java 8,Java Stream,假设我的第一个列表是: [{租户编号:777,编号:1},{租户编号:888,编号:2},{租户编号:999,编号:3}] 我的第二个清单是 [{租户编号:444,编号:4},{租户编号:999,编号:5},{租户编号:666,编号:6}] 因此,如果我们在两个列表中按名称进行比较,第二个列表中有两个对象不在第一个列表中。如何在Java中找到这一点 这就是我所尝试的: final Long newAccounts=endDateData.stream() .map(TenancyHistory:

假设我的第一个列表是:

[{租户编号:777,编号:1},{租户编号:888,编号:2},{租户编号:999,编号:3}]

我的第二个清单是

[{租户编号:444,编号:4},{租户编号:999,编号:5},{租户编号:666,编号:6}]

因此,如果我们在两个列表中按名称进行比较,第二个列表中有两个对象不在第一个列表中。如何在Java中找到这一点

这就是我所尝试的:

final Long newAccounts=endDateData.stream()
.map(TenancyHistory::getTenancyNumber)
.filter(startDateData.stream().map(TenancyHistory::getTenancyNumber)::等于)
.count();
这是一个错误

[PredicateIncompatibleType]谓词的计算结果始终为false 因为Stream和Long类型不兼容


您可以首先创建租赁编号的查找
,以便在迭代第二个列表时在过滤器中进行简化

Set<Long> tenancies = startDateData.stream()
                                   .map(TenancyHistory::getTenancyNumber)
                                   .collect(Collectors.toSet());

<> >为了帮助您理解您所面临的错误消息,请考虑代码

(end/start)DateData.stream().map(TenancyHistory::getTenancyNumber)
这将返回一个
,现在您在
过滤器
阶段执行的是将
与另一个
租约号值进行比较,如下所示:

startDateData.stream().map(TenancyHistory::getTenancyNumber)::equals
因此,读取此错误消息的计算结果将始终为
false
。这样,您的结果值将始终为
0

startDateData.stream().map(TenancyHistory::getTenancyNumber)::equals