是否可以cast
int array
到char array
?如果是这样 - how
?
我目前正在开展一个项目,我需要create an char array
包含alphabet
。 我的当前code
创建了一个int array
(converted
到一个行中的char array
- !) :
return IntStream.range('a', 'z' + 1).toArray();
答案 0 :(得分:5)
是的,我们缺少一个生成char数组的stream方法。也许是一个完整的CharStream类。在任何情况下,不,你不能在int[]
和char[]
之间进行投射。
与此同时,这是一个很长的路线,但它确实有效:
return IntStream.rangeClosed('a', 'z')
.mapToObj(c -> Character.toString((char) c))
.collect(Collectors.joining())
.toCharArray();
这会产生一个char[]
包含
[a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z]
答案 1 :(得分:1)
从 Java-11 开始,您可以使用.mapToObj(Character::toString)
而不是.mapToObj(c -> Character.toString((char) c))
,因此您的总体代码可以归结为:
return IntStream.rangeClosed('a', 'z')
.mapToObj(Character::toString)
.collect(Collectors.joining())
.toCharArray();
答案 2 :(得分:0)
让我们保持一行:
return IntStream.range('a', 'z' + 1).mapToObj(i -> Character.valueOf((char) i)).toArray(Character[]::new);
这会将IntStream
转换为Stream<Character>
。请记住,字符和整数在许多计算方面基本相同,因此这一步可能是不必要的(特别是对于比较)。
修改强>
修正了上面的功能,有一个更好的解决方案,但我仍然试图再次找到它。它目前返回Character[]
数组。
如果没有1行限制,只需重新制作数组,将a
视为0索引。
char[] back = new char[('z' + 1) - 'a'];
IntStream.range('a', 'z' + 1).forEach(i -> back[i - 'a'] = (char) i);
return back;
答案 3 :(得分:0)
您无法将int数组转换为char数组,因为存在完全不同的类型。
有两种可能的选择:
1)创建一个char数组并从int数组中复制每个值 2)使用通用列表或集合。您可以简单地将其用于投射