我是Java8的新手,我想写一个函数,它按值对hashmap排序,如果值是按键排序的。
要按值对hashmap排序,请执行以下操作:
Map<String, Integer> map1 = new LinkedHashMap<>();
map.entrySet()
.stream()
.sorted(Map.Entry.<String, Integer>comparingByValue().reversed())
.forEachOrdered(x -> map1.put(x.getKey(), x.getValue()));
map1.forEach((k,v) ->{ System.out.println(k +" "+v);} );
我使用过python3,它使用 mapSorted = sorted(map.items()
, key = lambda item : (item[1], item[0]))
. Java8中有类似的东西吗?
2条答案
按热度按时间ndasle7k1#
定义Map
排序,如果您想与字符串比较,您需要自己定义它
结果如[aa=5,DDDD=3,ccccc=2,bbb=2]
7cjasjjr2#
你期待的api是
Comparator#thenComparing
. 这种排序的实现之所以不简单,是因为类型推断。类型推断需要一些帮助,例如:
除此之外,您最好将输出收集到保留顺序的Map,否则,排序将浪费计算。因此,这样的事情应该会起作用: