排序地图<string,integer =“”>最大的首先进入列表<string>有效吗?

时间:2015-07-01 22:15:42

标签: java sorting java-8

我有一个ConcurrentMap<String, Integer>,我希望从中获取List<String>,并将字符串映射到最大的整数,第二大秒,等等。

现在我有类似的东西:
循环遍历地图的keySet 在该循环中,循环遍历&#34;排序&#34; List<String>
保持循环,直到键的字符串各自的值小于&#34;排序的&#34;的元素iList,然后插入它。

现在这会奏效,但我怀疑它效率很高。 Java 8是否有任何内置的排序算法可以帮助我?

3 个答案:

答案 0 :(得分:9)

使用流,您可以这样写:

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

或者Holger评论道:

import static java.util.Collections.reverseOrder;
import static java.util.Comparator.comparing;
import static java.util.stream.Collectors.toList;

注意静态导入:

{{1}}

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

答案 1 :(得分:1)

是的,确实如此。你可以这样做:

System.out.println(client.resource(RESTFUL_URL_DISCIPLINAS));
        System.out.println(client.resource(RESTFUL_URL_DISCIPLINAS).path(id.toString()));
        System.out.println(client.resource(RESTFUL_URL_DISCIPLINAS).path(id.toString()).path("curso"));
        WebResource webResource = client.resource(RESTFUL_URL_DISCIPLINAS).path(id.toString()).path("curso");

答案 2 :(得分:0)

import java.util. TreeSet;

import java.util.Set; import java.util.concurrent.ConcurrentHashMap;

公共课测试{

public static void main(String[] args){
    ConcurrentHashMap< String, Integer> map = new ConcurrentHashMap<String , Integer>();
    map.put("Fish", 1);
    map.put("Bird", 100);
    map.put("Reptile", 2);
    map.put("Mammal", 10);
    TreeSet <Integer> sortedList = new TreeSet <Integer>(map.values());
    for(Integer i :sortedList){
        System.out.println(i);
    }
}

}