如何比较对象列表和嵌套列表?

时间:2018-11-29 10:18:36

标签: java compare

我有应该检查的日志事件列表,它们与应该的相同。有Event对象的结构:

public class Event {
    public String type;
    public List<Item> items;

    public Event(String type, List<Item> items) {
        this.type = type;
        this.items = items;
    }
}
public class Item {
    public String id;
    public String value;

    public Item(String id, String value) {
        this.id = id;
        this.value = value;
    }
} 
List<Event> should = asList(
                new Event("1000", asList(new Item("server_id", "1"), new Item("user_id", "11"))),
                new Event("1000", asList(new Item("server_id", "2"), new Item("user_id", "22"))));
        List<Event> logged = asList(
                new Event("1000", asList(new Item("server_id", "2"), new Item("user_id", "22"))),
                new Event("1000", asList(new Item("server_id", "1"), new Item("user_id", "11"))));

我有一个答案,我可以用这样的代码做到这一点:

List<String> actualValues =  logged.stream().flatMap(l -> l.items.stream())
        .map(i -> i.value).collect(Collectors.toList());
List<String> shouldValues = should.stream().flatMap(l -> l.items.stream())
        .map(i -> i.value).collect(Collectors.toList());

boolean logMatch = actualValues.equals(shouldValues);

这很好,但是我发现问题,记录的事件可以有任何顺序(服务器有时将它们混合),但是事件中的List<Item>应该具有相同的顺序,所以我不能使用Set<String>。 我应该如何以适当的方式比较这些活动?

0 个答案:

没有答案