2015-01-27 3 views
-1

내 목표는 정렬 된 키 값의 오름차순 배열/목록을 반환하는지도가 주어집니다. 예를 들면 :정렬 값으로 자바에서

입력 : 공백으로 구분하여 다음과 같은 키/값 항목을 포함하는지도 :

"Apple" 10 
"Orange" 8 
"Kiwi" 15 

출력 :

{Orange;Apple;Kiwi} 

나는를 작성하고 생각할 수있는 유일한 다른 접근 방식 Map<Integer,Set<String>> 그리고 나서 상당히 복잡한 열쇠로 정렬합니다. 이 접근 방식을 사용할 수는 있지만 코드와 로직면에서 비효율적 인 것처럼 보입니다. 정말 고마워!

+0

비교기 사용은 어떻습니까? –

+0

귀하의 질문에 대한 답변의 자세한 설명은 여기에 있습니다 : http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java – bllakjakk

답변

1

한 가지 방법은 Map을 List로 푸시 한 다음 Comparator를 사용하여 값을 정렬 한 다음 다시 Map에 넣는 것입니다.

예를 들어, 같은 :

List<Map.Entry<String, Integer>> list = 
      new LinkedList<Map.Entry<String, Integer>>(mapYouPassedIn.entrySet()); 

는 그런 다음은, Collections.sort()를 사용하여 플러스 비교기는이 목록을 통해 고된 작업을 할 수 있습니다.

+0

나는 Comparator를 사용하여이 목록을 정렬하는 방법을 조금 혼란스럽게 생각합니다. 더 확장 할 수 있었습니까? 도와 주셔서 감사합니다! – user3750474

+0

자바 인터페이스에 익숙해 져야한다고 생각합니다. 자바 초보자 초보자 – user3750474

1

자바 이 사용 스트림 매우 간단한 방법이 8 예 :

map.entrySet().stream() 
    .sorted(Map.Entry.comparingByValue()) 
    .map(Map.Entry::getKey) 
    .collect(Collectors.toList()); 

:

public class Test { 
    public static void main(String[] args) { 
     Map<String, Integer> map = new TreeMap<>(); 
     map.put("A", 2); 
     map.put("B", 3); 
     map.put("C", 1); 
     System.out.println(map.entrySet().stream() 
      .sorted(Map.Entry.comparingByValue()) 
      .map(Map.Entry::getKey) 
      .collect(Collectors.toList())); 
    } 
} 

인쇄 [C, A, B]

+0

어떤 이유로 컴파일되지 않습니다 ... – user3750474

+0

어떤 오류가 발생합니까? – sprinter

+0

java입니다. 8. 컴파일러 버전은 무엇입니까? – Burusothman

0

넌 hashMap에서 entrySet을 가져와 Map.entry 목록을 정렬 할 수 있습니다. 예 :

List<Map.Entry<Integer, Integer>> list = new LinkedList<Map.Entry 
<Integer, Integer>>(map.entrySet()); 
    Comparator<Map.Entry<Integer, Integer>> comp = 
new Comparator<Map.Entry<Integer, Integer>>() 
    { 

     @Override 
     public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) 
     { 
      return (o1.getValue()).compareTo(o2.getValue()); 
     } 
    }; 

    Comparator<Map.Entry<Integer, Integer>> cmp1 = Collections.reverseOrder(comp); 
    Collections.sort(list, cmp1);