在由Java Stream.of()与IntStream与Arrays.stream()生成的Stream上调用map(Arrays :: toString)

Ara*_*gor 2 java java-8 java-stream

为什么toString我在使用时无法解决该方法Arrays.stream()IntStream:

int row[] = ...
Arrays.stream(row)
      .map(Arrays::toString)
      .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

但是,另一方面,它可以在我使用时解决Stream.of():

int row[] = ...
Stream.of(row)
       .map(Arrays::toString)
       .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 5

Stream.of(row)将返回Stream<int[]>其单个元素是row数组.Arrays包含一个toString接受a的静态方法int[],所以你的第二个片段通过了编译.

另一方面,Arrays.stream(row)(以及IntStream.of(row))返回IntStream其元素为的元素int.有没有toString在方法Arrays类,带有一个int参数.

你可以用Integer's static toString方法代替:

Arrays.stream(row)
      .mapToObj(Integer::toString)
      .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

请注意,您应该调用mapToObj而不是map在将基元映射int到引用类型时.

  • @ Ervan,只需在`IntSteam`上调用`boxed`就可以将原语转换为包装器.我们真的不需要这种转换来打印单个数组元素.`Arrays.stream(row).forEach(System.out :: println);`也可以. (2认同)