-1

私は2つのリストを持っています -

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

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

2つの共通レコードのみのリストを提供できるJava APIにすでに存在するユーティリティメソッドはありますか?

期待されるリスト -> [obj1, obj6]

MyObject は次のようになります -

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

使用して比較を行うだけnumberですname


retainAllまたはremoveAllを使用して目的のリストを取得する方法を認識しています。ただし、問題は、別の目的で使用されるため、のメソッドをオーバーライドできないequalsMyObjectことです。retainAllorメソッドはオブジェクトremoveAllを受け入れないようです。Comparator

別の解決策は、リストを反復処理して共通のものを見つけることです。それを行う方法がすでにあるかどうかを探しています。

ありがとう。

4

2 に答える 2

3

私はあなたがすでに提案しているよりもきれいな方法を知りません。

ただし、同等性が必要であるが使用できない場合equals(私は尋ねません;)、リストをマージして並べ替えてから、重複する要素のみを保持して、各要素を次の要素と手動で比較できます。

于 2012-07-12T06:22:46.860 に答える
1

2つのリストから同じ値を取得したい場合は、文字列の例を示します。

/**
 * @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 に答える