我有应该检查的日志事件列表,它们与应该的相同。有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>
。
我应该如何以适当的方式比较这些活动?