为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Java 8 Stream forEach 方法迭代 char 数组

使用 Java 8 Stream forEach 方法迭代 char 数组

慕的地10843 2023-09-27 16:51:41
面对一个奇怪的问题,我正在尝试使用流 foreach 方法迭代 char 数组,它会给出编译时错误。如果我尝试使用整数数组进行相同的操作,它工作正常。有什么线索吗?代码String input = "test";char[] chars = input.toCharArray();    Arrays.stream(chars).forEach((e) -> {   System.out.println(e); });给出编译器错误 数组类型中的方法stream(T[])不适用于参数(char[])如果我将其更改为 Array of int ,它工作正常我缺少什么?
查看完整描述

4 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

我知道 Stream 的原因是接受字符,而不是字符。


其中 char 是表示单个 16 位 Unicode 字符的原始类型,而 Character 是一个包装类,允许我们以 OOP 方式使用 char 原始概念。


    char[] chars = input.toCharArray();

    Character[] charObjectArray = ArrayUtils.toObject(chars);

    Arrays.stream(charObjectArray).forEach((e) -> {

       System.out.println(e); 

    });

如果将 char 向上转换为 Character,那么它将允许迭代。


查看完整回答
反对 回复 2023-09-27
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

没有CharStream,这就是为什么没有Arrays.stream()接受 的方法char[]。下一个最接近的东西是IntStream.

您可以使用:

input.chars().forEach(e -> System.out.println((char) e));


查看完整回答
反对 回复 2023-09-27
?
潇湘沐

TA贡献1816条经验 获得超6个赞

如果你需要使用 forEach 你应该使用它的循环版本:


    String input = "test";

    char[] chars = input.toCharArray();    

    for (char c : chars) {

        System.out.println(c);

    }

如果您确实需要 Stream API forEach,您可以将数组包装在列表中:


    String input = "test";

    char[] chars = input.toCharArray();    

    Arrays.asList(chars).stream().forEach(System.out::println);


查看完整回答
反对 回复 2023-09-27
?
撒科打诨

TA贡献1934条经验 获得超2个赞

您看到的实际错误是:


|  no suitable method found for stream(char[])

|      method java.util.Arrays.<T>stream(T[]) is not applicable

|        (inference variable T has incompatible bounds

|          equality constraints: char

|          lower bounds: java.lang.Object)

|      method java.util.Arrays.<T>stream(T[],int,int) is not applicable

|        (cannot infer type-variable(s) T

|          (actual and formal argument lists differ in length))

|      method java.util.Arrays.stream(int[]) is not applicable

|        (argument mismatch; char[] cannot be converted to int[])

|      method java.util.Arrays.stream(long[]) is not applicable

|        (argument mismatch; char[] cannot be converted to long[])

|      method java.util.Arrays.stream(double[]) is not applicable

因此,如果您查看该类的文档java.util.Arrays并查找该stream方法,您确实只会看到该stream方法被重载了

  • double[]返回一个DoubleStream

  • int[] 返回一个IntStream

  • long[] 返回一个LongStream

  • T[] 返回一个Stream<T>

只是没有一个CharStream.

恕我直言,你最好的选择是:

jshell> String input = "test";

input ==> "test"


jshell> input.codePoints().forEach((c) -> { System.out.println(c); })

116

101

115

116

或者


jshell> input.codePoints().forEach((c) -> { System.out.println((char)c); })

t

e

s

t

这个问题的其他答案有其他选择。


查看完整回答
反对 回复 2023-09-27
  • 4 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信