2013-07-03 14 views
13

In Ruby, posso fare qualcosa di simile:iterare su array statico in Java senza matrice variabile

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

iterazione di una matrice definita nella dichiarazione in cui lo sto usando. Dal momento che posso definire un array in Java come:

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

So che posso evitare di definire la variabile attraverso la creazione di un ciclo come:

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

Ma, speravo java potrebbe avere qualcosa di più concisa , senza definire una variabile contenente la matrice prima, e anche mi permetta di evitare l'allocazione dinamica, c'è una sintassi del tipo:

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

T cappello è più terso che funzionerà con Java che mi manca, o è la soluzione che ho sopra la mia unica opzione?

+1

Buona domanda. Sarebbe interessante vedere se esiste un modo più semplice per definire strutture di dati letterali. – feralin

+1

Trova questa domanda (quasi identica) durante la navigazione: http://stackoverflow.com/questions/2358866/java-anonymous-array-in-for-each-loop?rq=1 – Xaq

risposta

7

Il meglio che puoi fare è

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

java.util.Arrays dà un metodo asList(...) che è un metodo var-arg, e può essere utilizzato per creare List (che è array dinamico) sul fly.

In questo modo è possibile dichiarare e iterare su una matrice in stessa istruzione

+0

funziona per me +1 –

+0

funziona anche per me, la migliore risposta finora – Xaq

0

linguaggi come Java sono incredibilmente verbose rispetto ai linguaggi terse come Ruby. Sembra a me come quello che hai già è la soluzione migliore:

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

In Java 8, si sarà in grado di effettuare le seguenti operazioni:

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

Questo utilizza il nuovo pacchetto java.util.stream e lambda expressions.

+0

Grazie - ho pensato che Java8 potrebbe aggiungere qualcosa del genere. – Xaq

1

Penso che la tua domanda riguardi lo zucchero sintattico per le collezioni più di qualsiasi altra cosa. Tuttavia, in Java 8 si può dire

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

dove si può ovviamente sostituire il proprio metodo letterale che è compatibile con Consumer<T>.