Skip to content
Advertisement

Compare two lists of different objects by certain two fields

I have two lists of different objects

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

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

I need to verify that these two lists have equal values for Id and Title fields. The way I see is to create Map<String, String> from two lists and then compare them.

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

But maybe assertj has an appropriate approach to solve my issue?

I would be grateful for any solution to my issue via stream or assertj or somehow else.

Advertisement

Answer

It could make sense to merge id / title into a single String, remap the input lists into List<String> and then use AssertJ hasSameElements to compare the new lists:

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())

);

User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement