我有一个Foo对象的ArrayList。 Foo的属性是String name和int age。 我不希望有多个同名,所以当同名时,只保留最大的年龄。 我正在寻找让我使用Java的想法。
答案 0 :(得分:2)
答案 1 :(得分:0)
将ArrayList<Foo>
中的每个(姓名,年龄)对放入HashMap<String,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 ) );
}
答案 2 :(得分: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);
}
在Foo上实现equals和hashCode()以使用name属性。