Java IntStream实现字符串小写转换报错无法从String转int怎么办
报错原因
这个类型不匹配错误是因为你用错了IntStream的map方法:
String.chars()返回的是IntStream,流里存的每个元素是对应字符的Unicode码点,本质是int类型整数。它的map方法要求传入的处理函数必须返回int类型,处理完还是返回存整数的IntStream。你写的lambda里返回的是String类型,和要求的返回值类型不符,自然会报"Type mismatch: cannot convert from String to int"的错。- 就算不看类型错误,你的转换逻辑也有问题:
Integer.toString(x)是把码点的数字值直接转成字符串,比如大写H的码点是72,这行代码会得到字符串"72",根本不是字符'H',跑起来也拿不到你要的结果。
正确写法
如果一定要用流实现单行转换,把map换成mapToObj(这个方法可以把IntStream里的整数映射成任意对象类型,返回对象流),同时修正字符转换逻辑即可:
String sum = "HI THERE"; String result = sum.chars() .mapToObj(c -> String.valueOf((char)c).toLowerCase()) .collect(Collectors.joining());
运行后result的值就是hi there。
如果没有强制用流的要求,直接调用String自带的toLowerCase()方法就够了,性能更好写法也更简洁:
String sum = "HI THERE"; String result = sum.toLowerCase();
内容的提问来源于stack exchange,提问作者MrYayou
相关产品推荐
相关产品推荐

