2

比較する必要がある 2 つのオブジェクト リストがあります。オブジェクトには名前属性があり、その名前のオブジェクトが他のリストに存在するかどうかを確認したいと思います。

ListUtils.subtract メソッドに出くわしましたが、Int や String などの型で使用している人しか見たことがありません...

カスタムオブジェクトタイプで使用できますか?

編集:

Myclass{
    private String name;
    public getName(){
        return this.name;
    }

}

このオブジェクト タイプのリストが 2 つあります。

List<MyClass> list1;
List<MyClass> list2;

これらのリストの 1 つは、いくつかの SQL クエリで作成されます。もう1つは、サーバー内のいくつかのファイルをチェックして作成されます。これらのリスト内のオブジェクトの数は同じである場合もあれば、どちらかがより多くのオブジェクトを持つ場合もあります。

一方のリストにあるが、もう一方のリストにないオブジェクトを取得する方法はありますか?

このようなもの:

List result = ListUtils.subract (list1,list2);

ただし、 name 属性を使用します。

4

4 に答える 4

0

2つのリストでListUtils.subtractを使用できます。equalsそれが機能するためには、name属性が両方のオブジェクトで同じである場合にのみtrueを返すようにカスタムクラスのメソッドを定義する必要があります。

ListUtils.substractはいえ、2つのリストの共通部分を教えてはいけません。そのためには、を使用しますListUtils.retainAll。単純に使用することもできますList.retainAllが、コピーを作成する代わりにリストの1つを変更するため、そのようなコピーを自分で作成する必要があります。

編集:したがって、交差は必要ありません。本当に減算が必要です。この方法で問題ありません。オブジェクトの等号を次のように記述してください。

bool equals(Object other) {
    if (other==null || !other instanceof MyClass) {
        return false;
    }
    return name.equals(other.name); // assume name is never null. You can check for that
}

リストで使用することもできCollection.removeAllます。

equalsたとえば、他の属性に従って比較するさまざまなシナリオがある場合など、オーバーライドすることが常に実用的であるとは限りません。その場合、GuavaライブラリComparatorのとCollections2.filterを使用できます。

于 2013-03-04T14:18:25.600 に答える
0

オブジェクトを実装しComparableます。methodではcompareTo()、name 属性に従って比較します。

于 2013-03-04T14:25:32.340 に答える
0

コンパレーターとコンパニブルを使用することもできます。ここに例があります http://www.digizol.com/2008/07/java-sorting-comparator-vs-comparable.html

于 2013-03-04T14:30:29.603 に答える
-3

答えは no rtf です なぜあなたは自分で検索するのに Google を使わないのですか なぜ ide を使ってドキュメンテーションを表示しないのですか

私はオーバーライドが問題を解決すると思いますが、ハックです

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {

    public static void main(String arg[]) {
        ArrayList<Dog> firstGroup = new ArrayList<Dog>();

        firstGroup.add(new Dog("Rintintin"));
        firstGroup.add(new Dog("Courage"));
        firstGroup.add(new Dog("Scooby-Dooby-Do"));

        ArrayList<Dog> secondGroup = new ArrayList<Dog>();

        secondGroup.add(new Dog("fido"));
        secondGroup.add(new Dog("Courage"));
        secondGroup.add(new Dog("Rintintin"));

        List<Dog> filterByName = filterByName(firstGroup,secondGroup);

        System.out.print(Arrays.toString(filterByName.toArray()));
    }

    private static List<Dog> filterByName(ArrayList<Dog> firstGroup, ArrayList<Dog> secondGroup) {
        List<Dog> result=new ArrayList<>();
        for (Dog orginal : firstGroup) 
            for (Dog finDog : secondGroup) 
                if(orginal.getName().equals(finDog.getName()))
                    result.add(new Dog(orginal.getName()));
        return result;
    }


}
于 2013-03-04T14:25:24.373 に答える