【发布时间】:2020-08-29 12:58:07
【问题描述】:
我需要使用stream将一个句子收集到一个map中,其中key是一个字符(顺序应该是这样的:句子中的第一个字母是map中的第一个,所以我选择LinkedHashMap),并且值是计数器,显示重复相同字符的频率。
示例输入:hello world
示例输出:h=1,e=1,l=3,o=2,w=1,r=1,d=1
有我的代码,我不明白是什么问题。
private Map<Character, Integer> countSymbols(String sentence) {
return sentence.chars()
.collect(Collectors.toMap(key -> (Character) key,
counter -> 1,
Integer::sum,
LinkedHashMap::new));
}
【问题讨论】:
-
chars()返回一个没有collect(Collector)方法的IntStream。使用.chars().mapToObj(i -> (Character)i)获取Stream<Character>。然后,您不需要在toMap中进行类型转换。 -
如果您对
Map<Character, Long>没问题,您也可以只使用Collectors.counting()。超级简单、紧凑、易读。
标签: java collections java-stream