2016-10-27 20 views
0

Stream APIで次のシナリオを達成しようとしていますが、成功しません。ストリームAPI経由でマップからソートされたリストを取得

次のグラフがあります。キーは人物の名前であり、セットには人物の名前(キー)があります。

Map<String, Set<String>> fooGraph 

私は友人の数(人気)に基づいて並べ替えられたArrayListのを持ちたい、人は持っています。例えば

これはその値

x -> a,b,c 

y -> a 

z -> a,b,c,d,e,f 

t -> a,b,c,d 

と一日の終わりとfooGraphですが、私は人の人気に基づいてリストを持っていると思います。リストには、次のようになります

z, t, x, y 
それは Stream APIで達成することができますどのように

+0

なぜSteam APIを使用する必要がありますか?適切な 'Comparator'を使って' TreeMap'を使いましょう。 –

答えて

4
List<String> sorted = fooGraph.entrySet() 
     .stream() 
     .sorted(Comparator.comparing(e -> e.getValue().size(), Comparator.reverseOrder())) 
     .map(Map.Entry::getKey) 
     .collect(Collectors.toList()); 
+0

バターのように動いています。私は別の副題があります。 2人に同数の友達がいる場合、このコードはどのように動作しますか?まず来て、最初に奉仕しましたか? –

+0

@AdInfinitum 'LinkedHashMap'のような順序付けされたマップの場合のみです。そうでなければ、「最初の」という概念はありません。 – shmosel

関連する問題