2017-09-16 12 views
1

値で並べ替える必要があるHashMapがあり、簡潔に保つようにしていますので、Java 8を使用しています。なぜわからないの?私はこれを試してみた:観測からの不一致があるなぜ私が見ることができないJavaで値でハッシュマップをソートする8

Main.java:65: error: no suitable method found for sorted(Comparator<Entry<Object,V#1>>) 
    .sorted(Map.Entry.comparingByValue()) 

followLikeCount.values() 
    .stream() 
    .sorted(Map.Entry.comparingByValue()) 
    .collect(Collectors.toList()); 

このコンパイル時の例外がスローされますどの。私はまた、コンパレータを使用して試した:

Comparator<Map.Entry<Integer, Integer>> byValue = 
      Map.Entry.<Integer, Integer>comparingByValue(); 

これは、同様のエラーが発生します。なぜコンパレータが有効でないのかアドバイスできますか?

+0

い '値()'のキー/値のペア、または単に値を持つ 'Entry'を返しますか? – markspace

+0

ああ、値だけですが、HashMap followLikeCountをストリームに直接変換することはできません。全く別の方法が必要ですか? – Bryn

+1

'entrySet()'を試してください。セットをストリーミングできます。 – markspace

答えて

5

あなたがentrySet()で返すことができSet<Map.Entry<Integer, Integer>>に、このコンパレータを使用する必要がvalues()

followLikeCount.values() 
    .stream() 
    .sorted(Map.Entry.comparingByValue()) 
    .collect(Collectors.toList()); 

によって返さList<Integer>Comparator<Map.Entry<Integer, Integer>>を使用しよう:

List<Map.Entry<Integer, Integer>> list = followLikeCount.entrySet() 
                .stream() 
                .sorted(Map.Entry.comparingByValue()) 
                .collect(Collectors.toList()); 

取得したい場合のみ値は、ソートされた、あなたはComparatorを変更することができますし、List<Integer>を取り戻す:

List<Integer> list = followLikeCount.values() 
      .stream() 
      .sorted(Comparator.naturalOrder()) 
      .collect(Collectors.toList()); 
+0

ソートされた( 'Comparable')値だけを取得したい場合は、コンパレータ 'followLikeCount.values().stream().sorted().collect(Collectors.toList());'で行うこともできます。またはStreamsなし: 'List list = new ArrayList <>(followLikeCount.values()); list.sort(null); ' – Holger

関連する問題