2016-04-16 157 views
7

我有一個簡單的問題,在Java上可以做如下類似的事情嗎?有兩個數組的Java foreach循環

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 
} 

其中的意圖是遍歷第一個數組,然後下一個數組。

我能想到的最好方法是使用單獨的for循環,for循環具有相同的內部代碼時進行冗餘編碼。

另一個解決方案是製作一個ArrayLists數組。這可以很容易地實現我的意圖,即:

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 
    } 
} 

但是,這使得代碼不可讀。有沒有乾淨的方式做後者,我不失去單獨的數組的名稱?

由於提前,德克蘭

回答

4

不可能的,至少下面的Java 9.這是一個可行的辦法

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

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

不可能的,試試下面的代碼

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

感謝您的快速回復! –

2

一解決方法是使用Streams

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

可以鏈多個集合在一起的Java 8使用Stream.offlatMap和遍歷順序,以便傳遞給Stream.of

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

實施例:

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); 
}); 

以上代碼將打印

Hello 
world