我有2个包含多个对象的列表。我想过滤在特定属性中包含相同String值的对象。 我们假设listA
包含属性为id
的对象。虽然它包含不同的对象,但与listB
相同。尽管这两个列表中的一些对象具有相同的ID。我想过滤这些对象并将它们放入新列表中。这是我走到这一步:Java过滤器列表,以便它只包含与另一个列表具有相同属性的对象
List<Customer> Clist = Customer.getAllCustomers();
List<License> Llist = License.getAllLicenses();
Predicate<Customer> customerNotNullPredicate = u -> (u.id != null);
Predicate<License> licenseNotNullPredicate = u -> (u.id != null);
List<Customer> Clistfiltered1 = Clist.parallelStream().filter(customerNotNullPredicate).collect(Collectors.toList());
List<License> Llistfiltered1 = Llist.parallelStream().filter(licenseNotNullPredicate).collect(Collectors.toList());
Clistfiltered1.retainAll(Llistfiltered1);
try {
Clistfiltered1.get(0);
} catch (Exception e){
System.out.println(e);
}
如果当然,retainAll()
不返回任何东西,因为这两个名单只包含了不同类型的对象。我如何尝试在对象的特定属性上使用retainAll()
?
非常感谢您提前。
你不能。当然,你必须首先找到两个列表都有共同点的id。然后,在第二步中,您可以过滤两个列表。 – AKSW
目前尚不清楚你想要什么。你只是筛选非''null'的ID,这与ID是无关的。那么,期望的结果是什么,“客户”实例列表或“许可证”实例列表?那么,'尝试{Clistfiltered1.get(0); } catch(Exception e){...}'...是你测试list.isEmpty()'的首选方法吗?真的吗? – Holger
@Holger由于这个例子直接来自我正在处理的应用程序,可能是我遗漏了一些信息。非空搜索是因为我有很多数据库条目在这个属性为null(我正在使用预定义的数据库),否则会引发异常。预期的结果是只包含ID在两个列表中匹配的对象的列表。 try,catch块只是为了快速测试,看看我得到了什么错误。我仍然在编码的学习过程中,并且从互联网资源中学习所有东西。对不起,我不熟悉最佳做法。 –