【发布时间】:2018-07-13 00:59:45
【问题描述】:
我在尝试计算字符串出现次数并按降序排序时遇到了一些麻烦。以下是示例输入列表:
test, test, to, to, to, to, today, tomorrow, today
所需的输出是这样的:
to, test, today tomorrow
这是我计算字符串出现次数并按相反顺序排序的代码:
Map<String, Integer> sortedTextSegmentList = new LinkedHashMap<String, Integer>();
for (String s : textSegmentList) {
if (sortedTextSegmentList.get(s) != null) {
sortedTextSegmentList.put(s, sortedTextSegmentList.get(s) + 1);
} else {
sortedTextSegmentList.put(s, 1);
}
}
sortedTextSegmentList.entrySet().stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (x, y)-> {throw new AssertionError();}, LinkedHashMap::new
));
但是,我得到了这个输出:
test, to, today, tomorrow
当我尝试打印时:
sortedTextSegmentList.forEach((key, value) -> {
System.out.println("KEY" + key);
System.out.println("VALUE " + value);
});
我正在测试 2,到 4,明天 1,今天 2,计数器是正确的。但是,它只是不按降序排序。有什么想法吗?
谢谢!
【问题讨论】:
-
您可能想看看使用
TreeMap或SortedMap:docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html -
您正在丢弃已排序的地图并打印原始地图...
-
@shmosel 如何访问排序后的地图?
-
sortedTextSegmentList = sortedTextSegmentList.entrySet().stream().sorted(...).collect(...); -
我看到我看到效果很好。谢谢!
标签: java string sorting linkedhashmap