我想写这样的foreach:
for (Object object1 : list1 , Object object2 : list2)
有可能吗?
答案 0 :(得分:5)
将其写为嵌套循环以迭代所有元素组合
for (Object object1 : list1){
for (Object object2 : list2){
...
}
}
或在do...while
的一次迭代中,这等于上面的代码。
int i = 0, j = 0;
do {
Object object1 = a.get(i)
Object object2 = b.get(j)
...
if (i == a.size() - 1) j++;
} while (i < a.size() && j < b.size());
您还可以合并两个列表,然后逐个迭代所有元素
// Add items to the other list - BEWARE - list1's contens will change
list1.addAll(list2);
for (Object object : list1) {
...
}
使用番石榴的安全方式
Iterable<Object> combined = Iterables.unmodifiableIterable(
Iterables.concat(list1, list2));
for (Object object : combined) {
System.out.println(object);
}
答案 1 :(得分:1)
这取决于你想要做什么。
如果你想在两个集合中迭代第0个到第N个项目,可以在一个循环体中使用两个元素,你可以这样写:
for(int i = 0;i < list1.size() && i < list2.size();i++) {
Object object1 = list1.get(i);
Object object2 = list2.get(i);
/* your code */
...
}
请注意,如果其中一个集合小于其他集合,则不会处理较大集合中的其他元素。
如果你想迭代list1然后再列出list2,你可以简单地创建一个包含前两个的新的:
List<Object> n = new ArrayList<Object>(list1);
n.addAll(list2)
for(Object o : n) {
/* your code */
...
}
或者最后,如果你想迭代列表列表,你可以
for(List<Object> il : (List<List<Object>>)list1) {
for(Object o : il) {
/* code for each object in child list */
...
}
/* code for each child list in parent */
...
}
答案 2 :(得分:0)
在单个foreach语句中,不允许同时迭代两个集合。如果您只想使用一个foreach,则必须先合并集合。
你可以这样做:
import java.util.*;
public class HelloWorld{
public static void main(String []args){
String s1 = "string 1";
String s2 = "string 2";
String s3 = "string 3";
String s4 = "string 4";
List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<String>();
list1.add(s1);
list1.add(s2);
list2.add(s3);
list2.add(s4);
List<String> merged = new ArrayList<String>();
merged.addAll(list1);
merged.addAll(list2);
for(String s : merged)
{
System.out.println(s);
}
}
}
答案 3 :(得分:0)
不可能这样写,但你可以使用这段代码
我希望它能帮助你
String []one={"hello","thanks"};
int[]two={1,2,3};
String item;
int flag;
for(int i=0;i<one.length+two.length;i++){
if(i<one.length){
item=one[i];
System.out.println(item);
}
if(i<two.length){
flag=two[i];
System.out.println(flag);
}
}