2012-07-28 3 views
0

내가이지도 분류 할 해시 맵 정렬하는 방법 :문자열, 문자열 컬렉션 <String []>> [인덱스]

String key = "MyKey"; 
Collection<String[]> values = new ArrayList<String[]>(); 
map.put(key, values); 

String[] firstValues = { "John", "21", "M"}; 
values.add(firstValues); //Name, Age, Gender 

String[] secondValues = { "Jane", "31", "W"}; 
values.add(secondValues); 

등 너무

:지도에서

Map<String, Collection<String[]>> map = new HashMap<String, Collection<String[]>>(); 

예를 들어입니다 finnaly, 있습니다 : 지도 :

그리고 내가 원하는 :

Collection<String[]> values = map.get(key); 

다음 종류의 두 번째 인덱스 (나이)에 의해 처음으로 알파벳 순으로 색인 (이름), 또는 에 의해, 예를 들어 특정 인덱스에 의해. 그래서 첫 번째 정렬이 될 것입니다 후 :

Mykey : [["Eve", "31", "W"], ["John", "21", "M"]]; 

초 종류 후 :

Mykey : [["John", "21", "M"], ["Eve", "31", "W"]]; 
+2

'수집'은 반드시 주문할 필요는 없습니다. 대신에'List'를 사용하는 것이 좋습니다. – Vatev

답변

3

사용 비교기를 지정하고 원하는대로 (이름 하나를 구현하는 API java.util.Collections.sort(List list, Comparator c), 나이에 대한 또 다른 하나)

또한 String[]{name, age, gender}을 요소로 사용하는 대신 이러한 변수를 구성원으로 갖는 Person 클래스를 만듭니다.

이제
public static final Comparator<Person> AGE_COMPARATOR = new Comparator<Person>() { 
    @Override 
    public int compare(Person p1, Person p2) { 
     // implement 
    } 
}; 

당신은 단순히 @Vatev가 제안 대신 Collection 인터페이스의 목록 인터페이스를 사용하는 가정

Collections.sort(map.get(key), Person.AGE_COMPARATOR); 

를 호출 할 수 있습니다 아마 여러분이이 클래스 내에서 원하는 2 개 개의 비교기를 배치합니다 :

Map<String, List<Person>> map = new HashMap<String, List<Person>>(); 
5

귀하의 코드는 Ruby와 같은 동적 언어로 경험 한 개발자가 저에게 쓴 것처럼 보입니다. Java를 사용하는 것이 최선의 방법이 아님을 알 수 있습니다. String[]을 해당. 자열을 특성으로 포함하는 적절한 오브젝트로 모델링해야합니다.

또한 질문의지도 부분이 그다지 관련이 없다고 생각합니다. — 속성 중 하나를 기준으로 정렬해야하는 개체 모음이 실제로 처리되고 있습니다. 지도에 이러한 컬렉션을 여러 개 가져도 솔루션에 영향을 미치지 않습니다.

정렬 자체는 @Havard Geithus가 이미 귀하에게 권고 한대로 이루어집니다.

관련 문제