Java Arrays.asList(word.toCharArray())不返回列表?
我试图将一个字符串转换成一个流,遇到了这个奇怪的事情 看起来word.toCharArray返回了一个数组,但是当我试图将它转换成一个数组列表时,它似乎失败了,输出是一个完整的字符串 这是怎么回事Java Arrays.asList(word.toCharArray())不返回列表?,java,arrays,string,java-8,java-stream,Java,Arrays,String,Java 8,Java Stream,我试图将一个字符串转换成一个流,遇到了这个奇怪的事情 看起来word.toCharArray返回了一个数组,但是当我试图将它转换成一个数组列表时,它似乎失败了,输出是一个完整的字符串 这是怎么回事 @Test public void testCharacterStream() { characterStreamNew("HELLO"); } private Stream<Character> characterStreamNew(String
@Test
public void testCharacterStream() {
characterStreamNew("HELLO");
}
private Stream<Character> characterStreamNew(String word) {
for(Character c: word.toCharArray()) {
out.println(c);
}
Arrays.asList(word.toCharArray()).stream()
.peek(out::println)
.forEachOrdered(out::println);
return null;
}
您可以使用如下字符:
word.chars()
.mapToObj(c -> (char) c)
.forEachOrdered(System.out::println);
输出
H
E
L
L
O
您的方法可以如下所示:
private static Stream<Character> characterStreamNew(String word) {
return word.chars().mapToObj(c -> (char) c);
}
您可以使用如下字符:
word.chars()
.mapToObj(c -> (char) c)
.forEachOrdered(System.out::println);
输出
H
E
L
L
O
您的方法可以如下所示:
private static Stream<Character> characterStreamNew(String word) {
return word.chars().mapToObj(c -> (char) c);
}
这是怎么回事
@Test
public void testCharacterStream() {
characterStreamNew("HELLO");
}
private Stream<Character> characterStreamNew(String word) {
for(Character c: word.toCharArray()) {
out.println(c);
}
Arrays.asList(word.toCharArray()).stream()
.peek(out::println)
.forEachOrdered(out::println);
return null;
}
以下是Arrays.asList的签名:
首先,List不是有效的Java类型,因为char不是引用类型
第二,无法生成列表,因为签名不允许这样做。让我们试试看。如果T是字符,那么替换将是
public static List<Character> asList(Character... a)
但是Character实际上意味着Character[],word.toCharArray生成char[]。Java语言不会将char[]转换为Character[]
事实上,实际发生的是T与char[]匹配,Arrays.asList的结果将是一个列表。您得到的对象将是一个大小为1的列表,其中包含一个char[]元素,该元素包含word的所有字符
这是怎么回事
@Test
public void testCharacterStream() {
characterStreamNew("HELLO");
}
private Stream<Character> characterStreamNew(String word) {
for(Character c: word.toCharArray()) {
out.println(c);
}
Arrays.asList(word.toCharArray()).stream()
.peek(out::println)
.forEachOrdered(out::println);
return null;
}
以下是Arrays.asList的签名:
首先,List不是有效的Java类型,因为char不是引用类型
第二,无法生成列表,因为签名不允许这样做。让我们试试看。如果T是字符,那么替换将是
public static List<Character> asList(Character... a)
但是Character实际上意味着Character[],word.toCharArray生成char[]。Java语言不会将char[]转换为Character[]
事实上,实际发生的是T与char[]匹配,Arrays.asList的结果将是一个列表。您得到的对象将是一个大小为1的列表,其中有一个char[]元素,该元素包含word的所有字符。String.ToCharray返回一个对象:字符串数组。
因此,在这里,您流式处理一个列表,其中包含一个元素:代码中的字符串数组
Arrays.asList(word.toCharArray()).stream()
.peek(out::println)
.forEachOrdered(out::println);
而你得到的结果。
因此,你应该尝试另一种方式来实现你所追求的目标
事实上,没有直接的方法来获得字符流,因为它不存在的开箱即用。最接近的是IntStream,它可以处理int流,但也可以处理short流或char流
正如YCF_L所建议的,您可以使用返回IntStream的String.chars或String.codePoints。
字符的整数表示不适合人类阅读,因此需要使用mapToObj将int元素转换为char String.toCharArray返回一个对象:字符串数组。
因此,在这里,您流式处理一个列表,其中包含一个元素:代码中的字符串数组
Arrays.asList(word.toCharArray()).stream()
.peek(out::println)
.forEachOrdered(out::println);
而你得到的结果。
因此,你应该尝试另一种方式来实现你所追求的目标
事实上,没有直接的方法来获得字符流,因为它不存在的开箱即用。最接近的是IntStream,它可以处理int流,但也可以处理short流或char流
正如YCF_L所建议的,您可以使用返回IntStream的String.chars或String.codePoints。
字符的整数表示不适合人类阅读,因此需要使用mapToObj将int元素转换为char 相关:基于int,但char和Character有相同的问题。将不会投票以重复方式关闭,因为问题的解释与解决方案不同。列表仅支持引用,不支持原语。Arrays.asList不会自动装箱char[]的元素,而是返回一个包含一个char[]引用的列表。相关:基于int,但char vs Character有相同的问题。将不会投票以重复方式关闭,因为问题的解释与解决方案不同。列表仅支持引用,不支持原语。Arrays.asList不会自动装箱char[]的元素,而是返回一个包含一个char[]引用的列表。