通过Stream API从Map获取排序列表

时间:2016-10-27 19:37:25

标签: java collections java-stream

我正在尝试使用Stream API实现以下方案,但没有成功。

我有以下图表。关键是人的姓名,集合中有人的朋友(密钥)的名称。

Map<String, Set<String>> fooGraph

我希望根据朋友的数量(受欢迎程度)得到一个排序的ArrayList,一个人有。

例如,

这是fooGraph及其值

x -> a,b,c

y -> a

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

t -> a,b,c,d

并且在一天结束时,我希望根据一个人的受欢迎程度列出一个列表。该列表应如下所示

z, t, x, y

如何使用Stream API实现目标?

1 个答案:

答案 0 :(得分:4)

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