首页 > 解决方案 > 类型不匹配:无法从 Map 转换到地图

问题描述

尝试使用流操作从输入字符串中获取 1-26 之间的映射数字。输入 - XYZ 或 xyz 预期输出是 Map - X - 24 Y - 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>

PS:看起来它是一个日食问题。在 IntelliJ 上工作正常。

标签: eclipsejava-8java-stream

解决方案


您缺少大写字符(如果输入是小写)。添加以下内容,您的代码应该可以正常运行:

.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}

推荐阅读