2011-08-02 8 views
1

Foo 객체의 ArrayList가 있습니다. Foo의 속성은 문자열 이름과 int 나이입니다. 나는 같은 이름을 하나 이상 갖고 싶지 않습니다. 그래서 같은 이름 일 때, 최고의 나이를 유지하십시오. 나는 Java로 갈 생각을 찾고있다.ArrayList의 객체 필터링

+2

이 숙제가 있습니까? –

+0

hasmap 솔루션의 보조 노트로 'Comparator'도 찾아보십시오. –

답변

2
  1. 당신이 만났던 현재 가장 나이가 많은 Foo를 추적하기 위해 Hashtable을 생성하십시오.
  2. ArrayList에서 반복하십시오. 각 Foo의 경우 :
    1. Hashtable에 주어진 이름의 항목이 포함되어 있지 않으면 해당 이름을 키로 추가하십시오.
    2. Hashtable에 주어진 이름의 Foo가 들어있는 경우 해당 이름을 확인하십시오.
      1. 현재 Foo의 나이가 Hashtable의 Foo 나이보다 큰 경우 Hashtable의 Foo를 찾고있는 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); 
} 

이름 속성을 사용하는 등호와 푸에 해시 코드()를 구현합니다.