0

1 つの共通属性を持つ重複オブジェクトのリストを取得する必要があります。

リストには以下の値があります

SomeType someObject1 = new SomeType ("hello1", "1");
SomeType someObject2 = new SomeType ("hello1", "2");
SomeType someObject3 = new SomeType ("hello", "1");
SomeType someObject4 = new SomeType ("hello2", "2");
SomeType someObject5 = new SomeType ("hello2", "1");
SomeType someObject6 = new SomeType ("hello3", "2");
SomeType someObject7 = new SomeType ("hello4", "1");
SomeType someObject8 = new SomeType ("hello5", "2");

この場合、共通の最初のパラメーター someObject1,someObject2 ,someObject4,someObject5 を別のリストで共有するオブジェクトを取得する必要があります。

for または while ループを反復せずに使用できる API はありますか。

4

4 に答える 4

2

Object.equals(Object)および) をそれらの契約に従って実装Object.hashCode(し、2 つの入力値が等価性と hashCode を決定するようにします。HashMap<SomeType, SomeType> 自分自身をキーとして使用して、すべてのオブジェクトを に入れ ます。次に、それらが必要なときに、新しいオブジェクトをキーとして使用してハッシュ マップをクエリすると、必要なオブジェクトを正確に取得できます。

于 2013-06-28T14:46:59.577 に答える
1

私が理解しているように、すべての複製が必要です。簡単な方法は、重複を許可せず、失敗した挿入をチェックする Set コレクションを使用することです。これを機能させるには、オブジェクトから equals メソッドをオーバーライドする必要があります。

public List<SomeObject> getDuplicates(List<SomeObject> objects) {
 Set<SomeObject> uniqueObjects = new HashSet<SomeObject>();
 List<SomeObject> duplicates = new ArrayList<SomeObject();

 for(SomeObject so : objects) {
  if(!uniqueObjects.add(so)) {
   duplicates.add(so);
  }
 }
 return duplicates;
}
于 2013-06-28T15:21:44.367 に答える
0

Guava の Multimapsをチェックしてください。次に、次のようなことができます。

List<SomeType> someTypes = getSomeTypes();
Multimap<String, SomeType> someTypesByName = Multimaps.index(someTypes, new Function<SomeType, String>() {
    @Override
    public String apply(SomeType someType) {
        return someType.getName();
    }
}

結果の Multimap である someTypesByName は、基本的に、その名前を持つ SomeType オブジェクトのリストへの名前のマップです。

于 2013-06-28T15:50:44.537 に答える