Итерация по статическому массиву в java без переменной массива

В 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, который мне не хватает, или это решение, которое у меня выше моего единственного варианта?

Ответы

Ответ 1

Лучшее, что вы можете сделать, это

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

java.util.Arrays дает метод asList(...), который является методом var-arg, и его можно использовать для создания List (который является динамическим массивом) на лету.

Таким образом, вы можете объявить и итерации по массиву в том же самом выражении

Ответ 2

В Java 8 вы сможете сделать следующее:

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

Это использует новый java.util.stream пакет и лямбда-выражения.

Ответ 3

Я думаю, что ваш вопрос касается синтаксического сахара для коллекций, как и все. Однако в Java 8 вы можете сказать

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

где вы, конечно, можете заменить свой собственный литерал метода, совместимый с Consumer<T>.

Ответ 4

Языки, подобные Java, невероятно подробны по сравнению с такими короткими языками, как Ruby. Мне кажется, что у вас уже есть лучший выбор:

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