需求背景:
需要将Map<String,Integer>中的数据按照value的大小进行排序
错误的做法:
Map<String, Integer> sortedMap = corpIdAndCountMap.entrySet().stream()
.sorted(Collections.reverseOrder(Entry.comparingByValue()))
.limit(pageQuery.getPageSize()).collect(Collectors.toMap(Entry::getKey, Entry::getValue));
结果(并没有按照排序的结果输出):
原因:使用sorted函数已经排序了,但是后面用了.collect(Collectors.toMap(Entry::getKey,Entry.getValue)),使得顺序被打乱了,因为HashMap本身是无序的,所以要注意一下.
正确的做法(使用LinkedHashMap):
Map<String, Integer> sortedMap = Maps.newLinkedHashMap();
corpIdAndCountMap.entrySet().stream()
.sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
.limit(pageQuery.getPageSize()).forEach(entry -> {
sortedMap.put(entry.getKey(), entry.getValue());
});
特此记录,以长记性~~~~~~