带有两个数组的Java foreach循环[重复]

Posted

技术标签:

【中文标题】带有两个数组的Java foreach循环[重复]【英文标题】:Java foreach loop with two arrays [duplicate] 【发布时间】:2016-08-08 08:27:41 【问题描述】:

我有一个简单的问题,可以在 Java 上完成类似以下的操作吗?

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 循环具有相同的内部代码时,这会导致冗余编码。

另一个解决方案是创建一个 ArrayList 数组。这样就很容易实现我的意图,即:

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
    

但这会导致代码不可读。有没有一种干净的方式来做后者,我不会丢失单独数组的名称?

提前致谢,德克兰

【问题讨论】:

为什么不使用标准的 for 循环? 【参考方案1】:

不可能,至少在 Java 9 以下。这是一种可能的方法

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

  
   ToDo1(i1.next());
   ToDo2(i2.next());
 

【讨论】:

【参考方案2】:

解决方法是使用Streams

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

【讨论】:

【参考方案3】:

您可以在 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

【讨论】:

【参考方案4】:

不可能,试试下面的代码

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
   

【讨论】:

感谢您的快速回复!

以上是关于带有两个数组的Java foreach循环[重复]的主要内容,如果未能解决你的问题,请参考以下文章

来自两个foreach数组的Echo值,没有重复

php foreach 嵌套循环大数组很慢?

java中for或foreach是如何遍历数组的?

详细讲解foreach循环的用法

java怎样用foreach遍历字符串数组?

使用foreach打印多维数组[重复]