通过某些两个字段比较两个不同对象的列表
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);
我有两个不同对象的列表
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);