如何使用Java 8循环和打印2D数组

时间:2015-05-06 00:38:39

标签: java multidimensional-array java-8

考虑这个二维数组

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

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

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

使用Java 8功能(Lambdas,方法参考,Streams,......)是否有一种新的优雅方式来循环和打印2D数组?

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

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

输出:

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

4 个答案:

答案 0 :(得分:16)

保持与Bundle bundle = new Bundle(); bundle.putExtra("Color", color); 循环相同的输出:

int value = getIntent().getExtras().getInt(Color)

(见Stream#flatMap。)

还有类似的东西:

for

产生的输出如下:

Sam Smith
Robert Delgro
James Gosling

(见String#join。)

此外:

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

产生的输出如下:

Sam Smith, Robert Delgro, James Gosling

(见Collectors#joining。)

加入是Java 8中讨论较少但仍然很精彩的新功能之一。

答案 1 :(得分:9)

标准Java

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

答案 2 :(得分:8)

试试这个

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

答案 3 :(得分:0)

在 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