eclipse - 类型不匹配:无法从 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 上工作正常。
解决方案
您缺少大写字符(如果输入是小写)。添加以下内容,您的代码应该可以正常运行:
.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}
推荐阅读
- php - 如何使用 Laravel 更新图像?
- python-3.x - 有没有办法简化这个功能,它看起来如何?
- amazon-web-services - 如何使用 AWS_PROXY 模式通过 API Gateway 和 CloudFront 通过 AWS Lambda 返回二进制内容?
- microsoft-cognitive - Luis 测试工具日期时间与本地解析的日期时间不同
- nginx - 用于rest api的nginx服务器块属性'root'
- javascript - 尝试检查是否选中了任何事件复选框
- video - 如何使用 ffmpeg 加速创建视频马赛克
- python - TypeError:字段“id”需要一个数字,但在 0x000002B6ADE878D0 处获得了 DeferredAttribute 对象
- activemq-artemis - ActiveMQ Artemis 什么时候清理 group id map
- reactjs - 将响应解析为 React 中的模型对象