尝试使用流操作从输入String获取1-26之间的映射数字。 输入 - XYZ或xyz 预期产量是地图 - X - 24 是 - 25 Z - 26
以下逻辑给出了编译错误:
Scanner scr = new Scanner(System.in);
String testString = scr.next();
Map<Character, Integer> charDigitMap = testString.chars().mapToObj(i -> (char) i).collect( Collectors.toMap(c -> c ,c -> (c - 'A' + 1)));
charDigitMap.forEach((k,v) -> System.out.println("--"+k+"--"+v));
错误是:
类型不匹配:无法从Map<Object,Object>
转换为Map<Character,Integer>
P.S: 看起来是一个日食问题。在intelliJ上工作正常。
答案 0 :(得分:0)
缺少大写字符(如果输入小的情况)。添加以下内容,您的代码应运行良好:
.map(Character::toUpperCase)
另一种方法:
Map<Character, Integer> intArray = "xyz".chars()
.map(Character::toUpperCase)
.collect(HashMap::new,
(c,m) -> c.put((char)m,
m-64),HashMap<Character,Integer>::putAll
);
输出:
{X=24, Y=25, Z=26}