排序地图<String,Integer>最大的首先进入列表<String>有效吗?

Rog*_*gue 3 java sorting java-8

我有一个ConcurrentMap<String, Integer>,我想List<String>从它的字符串映射到最大的整数,第二,第二,等等.

现在我有这样的事情:
循环遍历keySet地图
在该循环中,循环"排序" List<String>
保持循环,直到键String的相应值小于i"已排序"的元素List,并插入它.

现在这将有效,但我怀疑它是非常有效的.Java 8是否有任何内置的排序算法可以帮助我?

ass*_*ias 9

使用流,你可以像这样写:

List<String> sorted = map.entrySet().stream()
                         .sorted(reverseOrder(comparing(Entry::getValue)))
                         .map(Entry::getKey)
                         .collect(toList());
Run Code Online (Sandbox Code Playgroud)

或者如Holger评论的那样:

List<String> sorted = map.entrySet().stream()
                         .sorted(comparingByValue(reverseOrder()))
                         .map(Entry::getKey)
                         .collect(toList());
Run Code Online (Sandbox Code Playgroud)

注意静态导入:

import static java.util.Collections.reverseOrder;
import static java.util.Comparator.comparing;
import static java.util.stream.Collectors.toList;
Run Code Online (Sandbox Code Playgroud)

我不知道这是否比你的方法更有效,但你可以分析两者并根据实际测量结果来决定.

  • @Pshemo:[它更容易](http://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html#comparingByValue-java.util.Comparator-):`.sorted (comparingByValue(reverseOrder()))` (2认同)