【问题标题】:Iterate over static array in java without array variable在没有数组变量的Java中迭代静态数组
【发布时间】:2013-07-01 11:17:42
【问题描述】:

在 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 一起使用,还是我拥有的解决方案超出了我唯一的选择?

【问题讨论】:

  • 好问题。看看是否有更简单的方法来定义文字数据结构会很有趣。
  • 刚刚在网上冲浪时发现了这个(几乎相同的)问题:stackoverflow.com/questions/2358866/…

标签: java arrays foreach iteration array-initialization


【解决方案1】:

我认为您的问题是关于集合的语法糖。但是,在 Java 8 中你可以说

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

您当然可以在其中替换您自己的与Consumer<T> 兼容的方法字面量。

【讨论】:

    【解决方案2】:

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

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

    这使用了新的java.util.stream 包和lambda expressions

    【讨论】:

    • 谢谢——我认为 Java8 可能会添加类似的东西。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      你能做的最好的就是

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-07-13
        • 1970-01-01
        • 1970-01-01
        • 2018-09-12
        • 2017-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多