Map按照Value值进行排序的实现
map.entrySet().stream().sorted(Comparator<? super T> comparator)
给定一个map,存储一个nums数组中每一个数字存储的次数,最后将这个map按照value值,即出现的次数进行排序
第一种方式:返回的是降序以后的新的map
@Testpublic void test04() {int[] nums = {1,2,3,1,3,4,6,7,9,9,1,3,4,5};Map<Integer,Integer> map = new LinkedHashMap<>();for (int i = 0; i < nums.length; i++) {map.put(nums[i],map.getOrDefault(nums[i],0) + 1);}//对map的value进行排序,并返回降序以后的map集合LinkedHashMap<Integer, Integer> collect = map.entrySet().stream().sorted((entry1, entry2) -> {return entry2.getValue() - entry1.getValue();}).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,(oldValue, newValue) -> oldValue, LinkedHashMap::new));collect.forEach((key,value) -> {System.out.println(key + ": " + value);});}
输出结果:
1: 3
3: 3
4: 2
9: 2
2: 1
6: 1
7: 1
5: 1
第二种方式:返回的是value降序的集合(List)
@Testpublic void test05() {int[] nums = {1,2,3,1,3,4,6,7,9,9,1,3,4,5};Map<Integer,Integer> map = new LinkedHashMap<>();for (int i = 0; i < nums.length; i++) {map.put(nums[i],map.getOrDefault(nums[i],0) + 1);}//按照map的value进行排序,并返回最后的value的降序的集合List<Integer> collect = map.entrySet().stream().sorted((entry1, entry2) -> entry2.getValue().compareTo(entry1.getValue())).map(entry -> entry.getValue()).collect(Collectors.toList());collect.forEach(System.out::println);}
输出结果:
3
3
2
2
1
1
1
1