繁体   English   中英

第二个列表中不在 java 中的第一个列表中的项目数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM