我有一个ConcurrentMap<String, Integer>
,我希望从中获取List<String>
,并将字符串映射到最大的整数,第二大秒,等等。
现在我有类似的东西:
循环遍历地图的keySet
在该循环中,循环遍历&#34;排序&#34; List<String>
保持循环,直到键的字符串各自的值小于&#34;排序的&#34;的元素i
。 List
,然后插入它。
现在这会奏效,但我怀疑它效率很高。 Java 8是否有任何内置的排序算法可以帮助我?
答案 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);
}
}
}