2016-04-16 98 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