在Java Stream.of()与IntStream与Arrays.Stream()生成的流上调用map(Arrays::toString)
为什么当我使用在Java Stream.of()与IntStream与Arrays.Stream()生成的流上调用map(Arrays::toString),java,java-8,java-stream,Java,Java 8,Java Stream,为什么当我使用Arrays.stream()或IntStream时,无法解析方法toString: int row[] = ... Arrays.stream(row) .map(Arrays::toString) .forEach(System.out::println); 但是,另一方面,当我使用Stream.of()时,它可以得到解决: Stream.of(row)将返回一个流,其单个元素是行数组Arrays包含一个静态方法toString,该方法接受int[],
Arrays.stream()
或IntStream
时,无法解析方法toString
:
int row[] = ...
Arrays.stream(row)
.map(Arrays::toString)
.forEach(System.out::println);
但是,另一方面,当我使用Stream.of()
时,它可以得到解决:
Stream.of(row)
将返回一个流
,其单个元素是行
数组Arrays
包含一个静态方法toString
,该方法接受int[]
,因此您的第二个代码段通过编译
另一方面,Arrays.stream(row)
(以及IntStream.of(row)
)返回一个IntStream
,其元素为int
。Arrays
类中没有接受int
参数的toString
方法
您可以使用Integer
的static
toString
方法:
Arrays.stream(row)
.mapToObj(Integer::toString)
.forEach(System.out::println);
请注意,在将基元
int
映射到引用类型时,应该调用mapToObj
,而不是map
。@Ervan,在IntSteam
上调用boxed
就足以将基元转换为包装器。我们并不需要这种转换来打印单个数组元素<代码>数组.stream(row).forEach(System.out::println)代码>也会起作用。@AntonBalaniuc这是真的。
Arrays.stream(row)
.mapToObj(Integer::toString)
.forEach(System.out::println);