0

cdOption、cdVersion、および cdDescription が異なるオブジェクトのリストがあります。

これらのいくつかは、cdOption が同じで cdVersion が異なります。cdOption が異なるオブジェクトのリストを取得する必要があるため、cdOption フィールドのみを考慮して重複を削除しようとしています。

これまでのところ、私はこれを持っています:

List<Option> noDuplicateOptions = new ArrayList<Option>();
List<Option> options = resp.get(RESULT);

for (Option option : options) {
    for (Option noDuplicateOption : noDuplicateOptions) {
        if (option.getCdOption().equals(noDuplicateOption.getCdOption())) {
        noDuplicateOptions.add(option);
    }
}
}

return noDuplicateOptions;

しかし、これを行うためのより高速で最適化された方法はありますか?

編集:私が使用した解決策は、次のように Option の equals メソッドをオーバーライドすることです:

public boolean equals(Object obj) {
return obj instanceof Option && ((Option)obj).getCdOption() == cdOption;
}

それから私はこれを行うことができます:

List<Option> options = resp.get(RESULT);

Map<String, Option> map = new HashMap<String, Option>();
for (Option option : options) {
    map.put(option.getCdOption(), option);
}
options.clear();
options.addAll(map.values());

return options;
4

4 に答える 4

1

ハッシュマップを使用します。すべてのオプションのループで、オプションが HashMap にあるかどうかを確認します。そうでない場合は HashMap に追加し、新しい配列がある場合は何もしません。

于 2013-10-11T09:40:02.620 に答える
0

Set重複を削除するために使用しcdOptionます。次のようComparatorに、に基づいて追加する必要があります。cdOption

 Set<Option> set=new TreeSet<>(new Comparator<Option>() {

        @Override
        public int compare( Option o1, Option o2) {
            return o1.getCdOption().compareTo(o2.getCdOption());
        }
 });
于 2013-10-11T09:42:43.250 に答える
0

質問の仕方が少し悪いです。「異なる cdOption を持つオブジェクトのリストを取得しようとしています。ただし、(cdVersion に関して) 重複があるため、( objectリストではなく)代表者のリストまたは cdOptions のリストのみを取得できます。 .

これは微妙かもしれません。しかし、このオブジェクトのリストには「the」はありません。そのようなリストはたくさんあります。

あなたはより速い方法を求めているので: 多くの場合、そのようなケースを処理する良い方法は、リストの構築時にこれを行うことです。つまり、2 つのリストを維持します。すべてのオプションを持つもの、一意の cdOptions を持つオプションサブセットを持つもの.... (たとえば、List の独自の拡張を記述します)。

于 2013-10-11T13:15:43.900 に答える