2013-07-03 7 views
13

In Ruby kann ich so etwas wie:Iterate über statisches Array in Java ohne Array-Variable

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

Iterieren über ein Feld in der Erklärung definiert, in dem ich es bin mit. Da ich ein Array in Java definieren mag:

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

Ich weiß, kann ich durch die Einrichtung einer Schleife wie definieren Sie die Variable vermeiden:

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

Aber ich war Java der Hoffnung, etwas haben könnte mehr terse , ohne eine Variable definiert, erlauben das Array erste, und auch enthält mir die dynamische Zuordnung zu vermeiden, ist es eine Syntax wie:

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

T Hat es etwas Kurzes, das mit Java funktioniert, das ich vermisse, oder ist die Lösung, die ich über meiner einzigen Option habe?

+1

Gute Frage. Es wäre interessant zu sehen, ob es einfacher ist, literale Datenstrukturen zu definieren. – feralin

+1

Gefunden gerade diese (fast identische) Frage beim Surfen: http://stackoverflow.com/questions/2358866/java-anonymous-array-in-for-each-loop?rq=1 – Xaq

Antwort

7

Das Beste, was Sie tun können, ist

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

java.util.Arrays ein Verfahren asList(...) gibt, die eine var-arg-Methode ist, und es kann verwendet werden List erstellen auf Fly (die dynamische Array).

Auf diese Weise können Sie und Iterierte über ein Array in derselben Anweisung

+0

arbeitet für mich +1 –

+0

funktioniert auch für mich, beste Antwort bisher – Xaq

0

Sprachen wie Java deklarieren sind unglaublich ausführlichen Vergleich zu terse Sprachen wie Ruby. Es scheint mir, wie das, was Sie bereits haben, ist die beste Wahl:

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

In Java 8, können Sie folgendes tun:

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

Dies nutzt die neue java.util.stream Paket und lambda expressions.

+0

Danke - ich dachte Java8 könnte etwas hinzufügen. – Xaq

1

Ich denke, Ihre Frage ist über syntaktischen Zucker für Sammlungen so viel wie alles. Allerdings 8 in Java können Sie

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

sagen, wo Sie natürlich Ihre eigene Methode wörtliche das ist kompatibel mit Consumer<T> ersetzen können.