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

时间:2017-02-05 09:59:39

标签: java java-8 java-stream

为什么在使用toStringArrays.stream()时无法解析方法IntStream

int row[] = ...
Arrays.stream(row)
      .map(Arrays::toString)
      .forEach(System.out::println);

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

int row[] = ...
Stream.of(row)
       .map(Arrays::toString)
       .forEach(System.out::println);

1 个答案:

答案 0 :(得分:5)

Stream.of(row)将返回Stream<int[]>,其单个元素是row数组。 Arrays包含一个接受toString的静态方法int[],因此您的第二个代码段会通过编译。

另一方面,Arrays.stream(row)(以及IntStream.of(row))会返回IntStream,其元素为inttoString类中没有采用Arrays参数的int方法。

您可以使用Integer的{​​{1}} static方法代替:

toString

请注意,在将基元Arrays.stream(row) .mapToObj(Integer::toString) .forEach(System.out::println); 映射到引用类型时,应该调用mapToObj而不是map