带有两个数组的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.of
和 flatMap
将多个集合链接在一起,并按顺序迭代以传递给 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循环[重复]的主要内容,如果未能解决你的问题,请参考以下文章