如何在Java8中填充映射? private静态映射populateMap(列表字符){ 最终映射inputStringCountMap=新HashMap(); for(字符ch:chars){ int-val=0; if(inputStringCountMap.containsKey(ch)){ val=inputStringCountMap.get(ch); } inputStringCountMap.put(ch,val+1); } 返回inputStringCountMap; }

如何在Java8中填充映射? private静态映射populateMap(列表字符){ 最终映射inputStringCountMap=新HashMap(); for(字符ch:chars){ int-val=0; if(inputStringCountMap.containsKey(ch)){ val=inputStringCountMap.get(ch); } inputStringCountMap.put(ch,val+1); } 返回inputStringCountMap; },java,algorithm,java-8,Java,Algorithm,Java 8,上面的函数只是用每个字符的计数填充映射 在Java 8中是否有一种更短/更简洁的方法来实现这一点?私有静态映射populateMap(列表字符){ private static Map<Character, Integer> populateMap(List<Character> chars) { final Map<Character, Integer> inputStringCountMap = new HashMap<Character,


上面的函数只是用每个
字符的计数填充映射
在Java 8中是否有一种更短/更简洁的方法来实现这一点?

私有静态映射populateMap(列表字符){
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;
}
返回chars.stream() .collect(Collectors.groupingBy(Function.identity()、Collectors.counting()); }
如果您可以使用
地图
,则带有计数子采集器的分组采集器应执行以下操作:

 private static Map<Character, Long> populateMap(List<Character> chars) {

    return chars.stream()
            .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

}

你可以试试这样的

Map<Character, Integer> result = chars.stream().collect(
    Collectors.toMap(Function.identity(), c -> 1, Integer::sum);
Map myFreq=newhashmap();
for(char ch:input.toCharArray()){
myFreq.put(ch,myFreq.getOrDefault(ch,0)+1);
}
这里是另一种方法

Map<Character,Integer> myFreq= new HashMap<>();
for (char ch : input.toCharArray()) {
    myFreq.put(ch, myFreq.getOrDefault(ch, 0) + 1);
}

我应该指出,
populateMap
对于一个方法来说是一个糟糕的名字——它导致了一个问题“用什么填充?”lambda函数没有将
(键,值)
作为参数,而是将
(旧值,新值)
作为参数。还有,为什么要从10开始?是的,谢谢。我是用自动驾驶仪做的。10是一个输入错误。
b+1也可能是不正确的,因为这总是会导致2。再次为真。我想我需要睡一觉。谢谢你的帮助。我现在已经修好了。但是,这里面没有涉及Java8的概念,我只是提供了一种更干净的方法来实现问题的方式。OP特别询问了Java8中的一种更干净的方式。我想他对溪流更感兴趣。
Map<Character,Integer> myFreq= new HashMap<>();
for (char ch : input.toCharArray()) {
    myFreq.put(ch, myFreq.getOrDefault(ch, 0) + 1);
}
for (Character ch : chars) {
    inputStringCountMap.merge(ch, 1, (a, b) -> a+b);
}