【发布时间】:2023-01-07 01:44:59
【问题描述】:
在 Java 11+ 中,是否有一种优雅的方法来查找 2 个对象列表之间的差异? 过滤应该在一个简单的 col1 值对象的一个“值”属性上完成。通常该对象将包含至少 2 个其他属性。
假设我有这两个列表:
- 列表 1:({“左”,“一”},{“左”,“二”})
- 列表 2:({“右”,“二”},{“右”,“三”})
结果应该是一个列表:
- ({“左”,“一”},{“右”,“三”})
当然,有一种简单的旧方法可以做到这一点。这个简单的程序给出:
ColValueObject{base='left', value='Value one'} ColValueObject{base='right', value='Value four'}
public class CompareListOfObjects { public static void main(String[] args) { List<ColValueObject> list1 = List.of( new ColValueObject("left", "Value one"), new ColValueObject("left", "Value two"), new ColValueObject("left", "Value three")); List<ColValueObject> list2 = List.of( new ColValueObject("right", "Value two"), new ColValueObject("right", "Value three"), new ColValueObject("right", "Value four")); List<ColValueObject> result = findDifferencesBetweenLists(list1, list2); result.forEach(System.out::println); } private static List<ColValueObject> findDifferencesBetweenLists(List<ColValueObject> list1, List<ColValueObject> list2) { List<ColValueObject> result = new ArrayList<>(); findUniqueEntriesInList((List<ColValueObject>) list1, (List<ColValueObject>) list2, (List<ColValueObject>) result); findUniqueEntriesInList((List<ColValueObject>) list2, (List<ColValueObject>) list1, (List<ColValueObject>) result); return result; } private static void findUniqueEntriesInList(List<ColValueObject> list1, List<ColValueObject> list2, List<ColValueObject> result) { for (ColValueObject l1 : list1) { boolean found = false; for (ColValueObject l2 : list2) { if (l1.getValue().equals(l2.getValue())) { found = true; break; } } if (!found) { result.add(l1); } } } } class ColValueObject { private String base; private String value; public ColValueObject(String base, String value) { this.base = base; this.value = value; } public String getBase() { return base; } public void setBase(String base) { this.base = base; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } @Override public String toString() { return "ColValueObject{" + "base='" + base + '\'' + ", value='" + value + '\'' + '}'; } }
【问题讨论】:
-
请准确描述“差异”结果是如何确定的以及您的代码有什么“错误”。
标签: java