【问题标题】:Calling map(Arrays::toString) on a Stream produced by Java Stream.of() vs. IntStream vs. Arrays.stream()在 Java Stream.of() 与 IntStream 与 A​​rrays.stream() 生成的 Stream 上调用 map(Arrays::toString)
【发布时间】:2017-06-22 09:17:09
【问题描述】:

为什么我使用Arrays.stream()IntStream时无法解析方法toString

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);

【问题讨论】:

    标签: java java-8 java-stream


    【解决方案1】:

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

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

    您可以改用Integerstatic toString 方法:

    Arrays.stream(row)
          .mapToObj(Integer::toString)
          .forEach(System.out::println);
    

    请注意,当您将原始 int 映射到引用类型时,您应该调用 mapToObj 而不是 map

    【讨论】:

    • @Ervan,在IntSteam 上调用boxed 将原语转换为包装器就足够了。而且我们真的不需要这种转换来打印单个数组元素。 Arrays.stream(row).forEach(System.out::println); 也可以。
    • @AntonBalaniuc 是的。
    猜你喜欢
    • 2020-07-27
    • 2021-11-18
    • 2019-07-17
    • 2019-10-12
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多