private static Map<Character, Integer> populateMap(List<Character> chars) {
final Map<Character, Integer> inputStringCountMap = new HashMap<Character, Integer>();
for (Character ch : chars) {
int val = 0;
if (inputStringCountMap.containsKey(ch)) {
val = inputStringCountMap.get(ch);
}
inputStringCountMap.put(ch, val + 1);
}
return inputStringCountMap;
}
上面的函数只是填充Map(每个字符的计数)。 在Java-8中,有没有更短/更简洁的方法来做到这一点?
答案 0 :(得分:8)
private static Map<Character, Long> populateMap(List<Character> chars) {
return chars.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
}
答案 1 :(得分:5)
如果您对Map<Character, Long>
感到满意,则应该使用带有计数子收集器的分组收集器来做到这一点:
Map<Character, Long> result = chars.stream().collect(
Collectors.groupingBy(Function.identity(), Collectors.counting());
如果您要求值类型为Integer
,则可以使用地图收集器来完成:
Map<Character, Integer> result = chars.stream().collect(
Collectors.toMap(Function.identity(), c -> 1, Integer::sum);
答案 2 :(得分:2)
您可以尝试这样的事情。
Map<Character,Integer> myFreq= new HashMap<>();
for (char ch : input.toCharArray()) {
myFreq.put(ch, myFreq.getOrDefault(ch, 0) + 1);
}
答案 3 :(得分:1)
这是另一种方式
for (Character ch : chars) {
inputStringCountMap.merge(ch, 1, (a, b) -> a+b);
}