我如何编写foreach循环?

时间:2014-01-12 11:55:42

标签: java foreach

我想写这样的foreach:

for (Object object1 : list1 , Object object2 : list2)

有可能吗?

4 个答案:

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