通过某些两个字段比较两个不同对象的列表

Compare two lists of different objects by certain two fields

我有两个不同对象的列表

class objectA {
String aId;
String aTitle;
String aUrl;
...
}
class objectB {
String bId;
String bTitle;
String bUrl;
...
}

List<ObjectA> aObjectList;
List<ObjectB> bObjectList;

我需要验证这两个列表的 Id 和 Title 字段值是否相等。 我看到的方式是从两个列表创建 Map 然后比较它们。

List<Map<String, String>> aObjectMapList = aObjectList.stream()...
List<Map<String, String>> bObjectMapList = bObjectList.stream()...

但也许 assertj 有合适的方法来解决我的问题?

如果能通过流或 assertj 或其他方式解决我的问题,我将不胜感激。

id / title 合并为一个字符串可能有意义,将输入列表重新映射到 List<String>,然后使用 AssertJ hasSameElements 比较新的列表:

assertThat(
    aObjectList.stream()
               .map(a -> String.join(":", a.aId, a.aTitle))
               .collect(Collectors.toList())
).hasSameElementsAs(
    bObjectList.stream()
               .map(b -> String.join(":", b.bId, b.bTitle))
               .collect(Collectors.toList())

);

我会在 2 个列表中为每个对象创建一个字符串 id+title。 然后比较2个列表

List<String> aList = aObjectList.stream()
   .map(a -> a.getaId() + a.getaTitle())
   .collect(Collectors.toList());
List<String> bList = bObjectList.stream()
   .map(b -> b.getbId() + b.getbTitle())
   .collect(Collectors.toList());

boolean sameElements = aList.size() == bList.size() && 
                       aList.containsAll(bList) && 
                       bList.containsAll(aList);