14

在 Ruby 中,我可以执行以下操作:

["FOO", "BAR"].each do { |str| puts str }

迭代在我使用它的语句中定义的数组。因为我可以在 Java 中定义一个数组,例如:

String[] array = { "FOO", "BAR" };

我知道我可以通过设置如下循环来避免定义变量:

for (String str : new String[] { "FOO", "BAR" }) { ... }

但是,我希望 java 可能有更简洁的东西,而不首先定义包含数组的变量,并且还允许我避免动态分配,是否有如下语法:

for (String str : { "FOO", "BAR" }) { ... }

这更简洁,可以与我缺少的 Java 一起使用,还是我拥有的解决方案超出了我唯一的选择?

4

4 回答 4

8

你能做的最好的就是

    for(String s : Arrays.asList("a", "b")) {
        System.out.println(s);
    }

java.util.Arrays给出了一个方法asList(...),它是一个 var-arg 方法,它可以用来动态创建List(它是动态数组)。

通过这种方式,您可以在同一语句中声明迭代数组

于 2013-07-03T16:42:55.477 回答
6

在 Java 8 中,您将能够执行以下操作:

Stream.of("FOO", "BAR").forEach(s -> System.out.println(s));

这使用了新的java.util.stream包和lambda 表达式

于 2013-07-03T17:01:39.067 回答
2

与像 Ruby 这样的简洁语言相比,像 Java 这样的语言非常冗长。在我看来,您已经拥有的是最好的选择:

for (String str : new String[] { "FOO", "BAR" }) { ... }
于 2013-07-03T16:51:24.910 回答
1

我认为您的问题与集合的语法糖一样多。但是,在 Java 8 中,您可以说

Arrays.asList("a", "b").forEach(System.out::println);

您当然可以在其中替换与Consumer<T>.

于 2017-08-31T12:39:25.950 回答