如何在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);
}