-1

我有两个清单 -

ArrayList<MyObject> list1 -> [obj1, obj2, obj3, obj4, obj5, obj6]

ArrayList<MyObject>  list2 -> [obj1, obj6, obj7, obj8]

java api中是否已经存在任何实用方法,可以只列出两个常见记录?

预期列表-> [obj1, obj6]

MyObject 看起来像这样 -

class MyObject {
  public Integer number;
  public String name;
  public Integer parent;
  public String parentName;
}

我只需要使用numberandname进行比较。


我知道使用retainAllremoveAll获取所需列表的方法。然而问题是,我不能覆盖equals方法,MyObject因为它用于某些不同的目的。并且retainAllorremoveAll方法似乎不接受Comparator对象。

我知道另一种解决方案是遍历列表并找到常见的列表。我正在寻找是否已经有一些方法可以做到这一点。

谢谢。

4

2 回答 2

3

我不知道比您已经建议的更清洁的方法。

但是,如果您需要相等但不能使用equals(我不会问;),您可以合并列表并对它们进行排序,然后手动将每个元素与下一个元素进行比较,只保留重复的元素。

于 2012-07-12T06:22:46.860 回答
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;
}

但是如果你想使用你的对象,请不要忘记实现equals方法。

于 2012-07-12T06:35:02.057 回答