2016-04-16 40 views
7

Ho una semplice domanda, è possibile che qualcosa come questo possa essere fatto su Java?Ciclo Java foreach con due array

ArrayList<String> arr1 = new ArrayList<String>(); 
ArrayList<String> arr2 = new ArrayList<String>(); 

// Processing arrays, filling them with data 

for(String str : arr1, arr2) { 
    //Do stuff 
} 

Dove l'intento è di iterare attraverso il primo array quindi l'array successivo.

La cosa migliore che posso capire è utilizzare entrambi i loop separati che rendono la codifica ridondante quando i cicli for hanno lo stesso codice interno.

Un'altra soluzione era creare una matrice di liste di array. Ciò semplifica la realizzazione del mio intento, ovvero:

ArrayList<ArrayList<String>> arr = new ArrayList<ArrayList<String>>(); 

// Initialising arr and populating with data 
for(ArrayList<String> tempArr : arr) { 
    for(String str : tempArr) { 
     //Do stuff 
    } 
} 

Ma questo rende il codice illeggibile. C'è un modo pulito di fare il secondo in cui non perdo i nomi degli array separati?

Grazie in anticipo, Declan

risposta

4

Non è possibile, almeno con sotto Java 9. Ecco una possibile via

i1= arr1.iterator(); 
i2= arr2.iterator(); 
while(arr1.hasNext() && arr2.hasNext()) 
{ 

    ToDo1(arr1.next()); 
    ToDo2(arr2.next()); 
} 
0

Non possibile, provare il codice qui sotto

List<String> arr1=new ArrayList<String>(); 
List<String> arr2==new ArrayList<String>(); 
List<ArrayList<String>> arrList=new ArrayList<ArrayList<String>>(); 
arrList.add(arr1); 
arrList.add(arr2); 
for(ArrayList<String> strlist : arrList) { 
    for(String s:strlist){ 
     // process array 
    } 
} 
+0

Grazie per la risposta veloce! –

2

A soluzione alternativa sarebbe utilizzare Streams

Stream.concat(arr1.stream(),arr2.stream()).forEachOrdered(str -> { 
    // for loop body 
}); 
1

È possibile catena più raccolte insieme usando Stream.of e flatMap in Java 8 e iterare in sequenza in ordine passato a Stream.of

Stream.of(s1, s2 ...).flatMap(s -> s) 

Esempio:

ArrayList<String> arr1 = new ArrayList<>(); 
ArrayList<String> arr2 = new ArrayList<>(); 

arr1.add("Hello"); 
arr2.add("World"); 

Stream.of(arr1.stream(), arr2.stream()).flatMap(s -> s).forEach(s1 -> { 
    System.out.println(s1); 
}); 

codice qui sopra stampare

Hello 
world