Итерация по статическому массиву в 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" }) { ... }