2017-03-01 4 views
1

그래서 값으로 HashMaps를 정렬 할 수있는이 메서드를 발견했습니다.HashMap을 역순으로 정렬 하시겠습니까?

public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) { 
     return map.entrySet() 
       .stream() 
       .sorted(Map.Entry.comparingByValue()) 
       .collect(Collectors.toMap(
         Map.Entry::getKey, 
         Map.Entry::getValue, 
         (e1, e2) -> e1, 
         LinkedHashMap::new 
         )); 
    } 

은 내가 Comparatorreversed() 방법을 사용하고 싶지만 나는 그것을 넣어 적당한 장소를 찾을 수 없습니다.

+0

http://stackoverflow.com/a/28607267/616460 –

+0

@JornVernee –

+0

작동하지 않는다 "아무튼 : 당신이 일반적인 유형을 지정해야합니다 그래서 자바의 타입 추론은, 불행하게도, 여기에 고장 '일하지 마라'? "어떻게 작동하지 않니?" –

답변

4

Comparator에서 reversed() 메서드는 comparingByValue()이 반환되어야합니다.

public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue 
    (Map<K, V> map) { 

    return map.entrySet() 
      .stream() 
      .sorted(Map.Entry.<K, V> comparingByValue().reversed()) 
      // Type here -----^ reversed() here -------^ 
      .collect(Collectors.toMap(
        Map.Entry::getKey, 
        Map.Entry::getValue, 
        (e1, e2) -> e1, 
        LinkedHashMap::new 
      )); 
} 
+3

@BenArnao 정확히 어떤 이유에서 시도했는지가 왜 효과가 없었는지에 대한 명확한 설명은 물론 귀하의 질문에서 시도한 것을 포함시키는 것이 일반적으로 좋은 아이디어입니다. –

+1

감사합니다, 이것이 내가 필요한 것입니다. 나는 그 장소에서 reversed()를 사용하려했지만 그 타입을 지정해야했기 때문에 작동하지 않았다. –