[英]number of items in the second list that aren't in the first list in java
假设我的第一个列表是:
[{tenancyNumber:777,no:1}, {tenancyNumber:888,no:2}, {tenancyNumber:999,no:3}]
我的第二个清单是
[{tenancyNumber:444,no:4}, {tenancyNumber:999,no:5}, {tenancyNumber:666,no:6}]
因此,如果我们在两个列表中按名称进行比较,则第二个列表中有 2 个不在第一个列表中的对象。 如何在 Java 中找到这个?
这是我尝试过的:
final Long newAccounts = endDateData.stream()
.map(TenancyHistory::getTenancyNumber)
.filter(startDateData.stream().map(TenancyHistory::getTenancyNumber)::equals)
.count();
这是抛出一个错误
[PredicateIncompatibleType] Predicate 将始终评估为 false,因为类型 Stream 和 Long 不兼容
您可以首先在过滤器中创建一个查找租用号码Set
,以便在您迭代第二个列表时进行缓动。
Set<Long> tenancies = startDateData.stream()
.map(TenancyHistory::getTenancyNumber)
.collect(Collectors.toSet());
现在您所做的尝试可以修复为;
final Long newAccounts = endDateData.stream()
.map(TenancyHistory::getTenancyNumber)
.filter(num -> !tenancies.contains(num)) // here
.count();
为了帮助您了解您所面临的错误消息,请考虑代码
(end/start)DateData.stream().map(TenancyHistory::getTenancyNumber)
这将返回一个Stream<Long>
,现在您最终在filter
阶段执行的是将Stream<Long>
与另一个Stream
的租户号的Long
值进行比较
startDateData.stream().map(TenancyHistory::getTenancyNumber)::equals
因此读取的错误消息将始终评估为false
。 这样您的结果值将始终为0
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.