我有两个列表,其中包含不同的对象。
List<Object1> list1;
List<Object2> list2;
我想根据特定属性检查 list1 中的元素是否存在于 list2 中(Object1 和 Object2 有(除其他外)一个共同属性(类型为 Long),名为 attributeSame)。
现在,我这样做:
boolean found = false;
for(Object1 object1 : list1){
for(Object2 object2: list2){
if(object1.getAttributeSame() == object2.getAttributeSame()){
found = true;
//also do something
}
}
if(!found){
//do something
}
found = false;
}
但我认为有更好更快的方法来做到这一点:)
有人可以提议吗?
Thanks!
如果您只需要测试基本相等性,则可以使用基本 JDK 来完成此操作,而无需修改一行中的输入列表
!Collections.disjoint(list1, list2);
如果您需要测试特定属性,那就更难了。我建议,默认情况下,
list1.stream()
.map(Object1::getProperty)
.anyMatch(
list2.stream()
.map(Object2::getProperty)
.collect(toSet())
::contains)
...它收集不同的值list2
并测试每个值list1
为了存在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)