我想比较 2 个 java 列表,其中包含 2 种不同类型的对象。然而,这两种类型的对象都有一些共同的属性,我想对它们进行比较。
class A {
int id;
}
class B {
int id2;
}
List<A> listA; // contains some objects
List<B> listB
// comparison logic
boolean isEqual = true;
if(listA.size() != listB.size())
isEqual = false;
for(int i=0;i<listA.size();++i) {
if(!listA.get(i).equals(listB.get(i)) {
isEqual = false;
break;
}
}
有没有一个好的方法可以通过java流来简洁地编写这个?
请您参考如下方法:
实现此目的的一种方法是使用 IntStream:
boolean equal = (IntStream.range(0, listA.size())
.filter(i -> listA.get(i).equals(listB.get(i))).count() == listA.size());
这不适用于不同大小的列表,但这只是一个简单的条件(listA.size() == listB.size()),为简洁起见,我省略了。
编辑:
可以使用noneMatch()对其进行改进:
boolean equal = IntStream.range(0, listA.size())
.noneMatch(i -> listA.get(i).id != listB.get(i).id2);
