【问题标题】:How to Loop and Print 2D array using Java 8如何使用 Java 8 循环和打印二维数组
【发布时间】:2015-05-06 00:38:39
【问题描述】:

考虑这个二维数组

String[][] names = { {"Sam", "Smith"},
                     {"Robert", "Delgro"},
                     {"James", "Gosling"},
                   };

使用经典的方式,如果我们想访问一个二维数组的每个元素,那么我们需要使用两个for循环来遍历二维数组。

for (String[] a : names) {
    for (String s : a) {
        System.out.println(s);
    }
}

是否有一种使用 Java 8 功能(Lambdas、方法引用、流...)循环和打印二维数组的优雅新方法?

到目前为止我尝试过的是:

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

输出:

[Ljava.lang.String;@6ce253f1
[Ljava.lang.String;@53d8d10a
[Ljava.lang.String;@e9e54c2

【问题讨论】:

  • 你的Strings如何在你的操作过程中变成ints?
  • 糟糕,抱歉。我已将代码从for (int[] a : names) { for (int i : a) { System.out.println(i); } } 编辑为for (String[] a : names) { for (String s : a) { System.out.println(s); } } 谢谢@Holger

标签: java multidimensional-array java-8


【解决方案1】:

保持与 for 循环相同的输出:

Stream.of(names)
    .flatMap(Stream::of)
        .forEach(System.out::println);

(见Stream#flatMap。)

还有类似的:

Arrays.stream(names)
    .map(a -> String.join(" ", a))
        .forEach(System.out::println);

产生如下输出:

山姆·史密斯
罗伯特·德尔格罗
詹姆斯·高斯林

(见String#join。)

还有:

System.out.println(
    Arrays.stream(names)
        .map(a -> String.join(" ", a))
            .collect(Collectors.joining(", "))
);

产生如下输出:

山姆·史密斯、罗伯特·德尔格罗、詹姆斯·高斯林

(见Collectors#joining。)

Join 是 Java 8 中讨论较少但仍然很棒的新特性之一。

【讨论】:

    【解决方案2】:

    试试这个

    Stream.of(names).map(Arrays::toString).forEach(System.out::println);
    

    【讨论】:

      【解决方案3】:

      在标准 Java 中

      System.out.println(Arrays.deepToString(names));
      

      【讨论】:

      • 非常好,但是有没有使用 java 8 特性的新方法?
      【解决方案4】:

      在 Java 8 中使用 StreamsforEach

          Arrays.stream(names).forEach((i) -> {
              Arrays.stream(i).forEach((j) -> System.out.print(j + " "));
              System.out.println();
          });
      

      第一个 forEach 充当外循环,而下一个充当内循环。

      这给出了以下输出:

      Sam Smith 
      Robert Delgro 
      James Gosling
      

      【讨论】:

        猜你喜欢
        • 2013-08-02
        • 1970-01-01
        • 2021-06-10
        • 2015-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-03
        相关资源
        最近更新 更多