2011-08-02 7 views
1

私はFooオブジェクトのArrayListを持っています。 FooのプロパティはString nameとint ageです。 私は同じ名前の2つ以上を望んでいないので、同じ名前のときは最高の年齢だけを保ちます。 私はJavaで動かすためのアイデアを探しています。ArrayListのオブジェクトをフィルターにかける

+2

この宿題はありますか? –

+0

hasmapの解決策の補足として、 'Comparator'も参照してください。 –

答えて

2
  1. あなたが出会った現在の最高年齢のFooを追跡するためのハッシュテーブルを作成します。
  2. ArrayListのループオーバー。各Fooの場合:
    1. Hashtableに指定された名前のアイテムが含まれていない場合は、その名前をキーとして追加します。
    2. Hashtableに指定された名前のFooが含まれている場合、その年齢をチェックします。
      1. 現在のFooの年齢がHashtableのFooの年齢よりも大きい場合は、HashtableのFooを探しているものに置き換えます。
0

プレイスHashMap<String,Foo>ArrayList<Foo>各(名前、年齢)対。 HashMapに既に同じ名前のキーが含まれている場合は、年齢を比較し、それに応じて置き換えます。

その後、ArrayListの要素をHashMapの要素に置き換えます。

HashMap<String,Foo> hashmap = new HashMap<String,Foo>(); 

for(Foo foo : arraylist) { 
    if(!hashmap.contains(foo.name) || hashmap.get(foo.name).age < foo.age) 
     hashmap.put(foo.name, foo); 
} 

arraylist.clear(); 

for(String name : hashmap.keySet()) { 
    arraylist.add(hashmap.get(name)); 
} 
0
Map<String , Foo> foos = new HashMap<String , Foo>(); 
for (Foo foo : listFoos) { 
    Foo currentFoo = foos.get(foo.getName()); 
    if (currentFoo == null) { 
     foos.add(foo.getName(), foo); 
     continue; 
    } 
    if (currentFoo.getAge() > foo.getAge()) 
     continue; 
    foos.put(foo.getName() , foo); 
} 

nameプロパティを使用するためにはFooにイコールとhashCode()を実装します。

関連する問題