类型不匹配:无法从Map <object,object>转换为Map <character,integer>

时间:2018-05-28 13:33:36

标签: eclipse java-8 java-stream

尝试使用流操作从输入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上工作正常。

1 个答案:

答案 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}