首页 > 解决方案 > 使用自定义逻辑比较 2 个 java 列表

问题描述

我想比较 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流简洁地编写这个的好方法?

标签: javajava-stream

解决方案


一种方法是使用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);

推荐阅读