繁体   English   中英

循环遍历不同的数组列表

[英]Looping through different arrays lists

我有三个不同大小的不同数组来收集节点状态,我想用一个循环遍历所有这些,而不是为每个循环创建一个。 我已经看到了将数组命名为整数并执行while / for循环和递增的示例,但我想找到一种方法来保留当前的数组名称。 这是我到目前为止所拥有的。

编辑:我想保持所有列表分开,以便很容易区分哪些节点具有什么状态..即

在线 - node1,node2 | 离线 - node3,node4 | 未知 - node5,node6

private String nodeStatus() {

    List<Node> onlineNodes = new ArrayList<Node>();
    List<Node> offlineNodes = new ArrayList<Node>();
    List<Node> unknownNodes = new ArrayList<Node>();

    for(Node n : getNodes()){

        if (n.isRunning() == RunningType.ONLINE) {
            onlineNodes.add(n);
        }

        if (n.isRunning() == RunningType.OFFLINE) {
            offlineNodes.add(n);
        }

        if (n.isRunning() == RunningType.UNKNOWN) {
            unknownNodes.add(n);
        }
    }

    for (Node element : <online,offline,unknown>) {
        System.out.println(element);
    }

}

如果我理解正确,你想要的是使用第四个列表在1个for-loop迭代3个列表,你可以实现这个目的:

import java.util.*;

public class MultipleArraysLooping {
    public static void main (String args[]) {
        List <String> list1 = new ArrayList <String>();
        List <String> list2 = new ArrayList <String>();
        List <String> list3 = new ArrayList <String>();
        fillLists(list1, list2, list3);
        iterateLists(list1, list2, list3);
    }

    public static void fillLists(List <String> list1,
        List <String> list2, List <String> list3) {
        list1.add("item1 on list1");
        list1.add("item2 on list1");
        list1.add("item3 on list1");

        list2.add("item1 on list2");
        list2.add("item2 on list2");
        list2.add("item3 on list2");
        list2.add("item4 on list2");
        list2.add("item5 on list2");

        list3.add("item1 on list3");
        list3.add("item2 on list3");
    }

    public static void iterateLists(List <String> list1,
        List <String> list2, List <String> list3) {
        int size = 0;
        if (list1.size() > list2.size()) {
            if (list1.size() > list3.size()) {
                size = list1.size();
            } else {
                size = list3.size();
            }
        } else {
            if (list2.size() > list3.size()) {
                size = list2.size();
            } else {
                size = list3.size();
            }
        }

        for (int i = 0; i < size; i++) {
            if (i < list1.size()) {
                System.out.println(list1.get(i));
            }
            if (i < list2.size()) {
                System.out.println(list2.get(i));
            }
            if (i < list3.size()) {
                System.out.println(list3.get(i));
            }
        }
    }
}

上面代码给出的输出是:

item1 on list1
item1 on list2
item1 on list3
item2 on list1
item2 on list2
item2 on list3
item3 on list1
item3 on list2
item4 on list2
item5 on list2

如您所见,它会交替迭代每个列表

我希望这有所帮助,可能有更好的方法来获得最大的数组大小。

如果你想要的是按顺序迭代其中的3个(列表1完成,然后列出2,最后列出3)或某个状态,那么,你需要在那里添加你的逻辑

您可能希望将状态映射保留为元素,而不是具有3个单独的变量。 假设你有Java 8并且getNodes()返回一个Collection ,你可以这样做:

Map<String, List<Node>> elementsByStatus = getNodes().stream()
        .collect(Collectors.groupingBy(Node::isRunning));

// print all elements
elementsByStatus.stream()
        .flatMap(List::stream)
        .forEach(System.out::println);

如果需要按状态迭代元素,可以执行以下操作:

elementsByStatus.forEach((status, elements) -> {
    elements.forEach(element -> {
        //...
    });
});

你可以试试这个:

public class ListIterator {

public static void print(List<String> list){

    for (String string : list) {
        System.out.println(string);
    }
}

public static void main(String[] args) {
    List<String> list1=new ArrayList<>();
    List<String> list2=new ArrayList<>();
    List<String> list3=new ArrayList<>();

    list1.add("List11");
    list1.add("List12");
    list1.add("List14");

    print(list1);

    System.out.println();
    list2.add("List21");
    list2.add("List22");
    print(list2);
    System.out.println();
    list3.add("List3");
    print(list3);
    System.out.println();




}
}

你也可以试试这个:

public class ListIterator {

public static void print(List<String> list){

    for (String string : list) {
        System.out.println(string);
    }
}

public static void main(String[] args) {
    List<String> list1=new ArrayList<>();
    List<String> list2=new ArrayList<>();
    List<String> list3=new ArrayList<>();

    list1.add("List11");
    list1.add("List12");
    list1.add("List13");


    list2.add("B1");
    list2.add("B2");



    list3.add("C1");

    int a=list1.size();
    int b=list2.size();
    int c=list3.size();

    int max=Math.max(a, b);
    max=Math.max(max, c);

    //System.out.println("");

    for(int i=0;i<max;i++){


       if (i<list1.size()) {
           System.out.println(list1.get(i));
       }
       if (i<list2.size()) {
           System.out.println(list2.get(i));
    }

       if (i<list3.size()) {
           System.out.println(list3.get(i));
    }

    }





}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM