我有两个清单 -
ArrayList<MyObject> list1 -> [obj1, obj2, obj3, obj4, obj5, obj6]
ArrayList<MyObject> list2 -> [obj1, obj6, obj7, obj8]
java api中是否存在任何实用方法,只能列出两个常见记录?
预期清单 - &gt;
[obj1, obj6]
MyObject看起来像这样 -
class MyObject {
public Integer number;
public String name;
public Integer parent;
public String parentName;
}
我只需要使用number
和name
进行比较。
我知道使用retainAll
或removeAll
获取所需列表的方法。但问题是,我无法覆盖equals
MyObject
方法,因为它用于某种不同目的。并且retainAll
或removeAll
方法似乎不接受Comparator
对象。
我知道另一种解决方案是遍历列表并找到常见的列表。我正在寻找是否已经有一些方法可以做到这一点。
感谢。
答案 0 :(得分:3)
我不知道有什么比你已经建议的更干净。
但是,如果你需要相等但不能使用equals
(我不会问;)你可以合并列表并对它们进行排序,然后手动将每个元素与下一个元素进行比较,仅保留重复的。
答案 1 :(得分:1)
如果你想从两个列表中获得相同的值,我给你一个字符串示例:
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// create a script engine manager
List<String> list_1 = new ArrayList<String>();
list_1.add("a");
list_1.add("b");
List<String> list_2 = new ArrayList<String>();
list_2.add("a");
list_2.add("b");
list_2.add("c");
System.out.println(getSameVaue(list_2,list_1));
}
public static List<String> getSameVaue(List<String> list1,
List<String> list2) {
List<String> result = new ArrayList<String>();
if (list1.size() > list2.size()) {
for (String s : list1) {
if (list2.contains(s)) {
result.add(s);
}
}
} else {
for (String s : list2) {
if (list1.contains(s)) {
result.add(s);
}
}
}
return result;
}
但是如果你想使用你的对象,请不要忘记实现等于方法。