2016-08-16 3 views
1

노드 상태를 수집하기 위해 서로 다른 크기의 세 가지 배열이 있는데 각각 하나씩 생성하는 대신 하나의 루프로 반복하고 싶습니다. 정수로 배열을 명명하고 while/for 루프와 incrementing을 사용하는 예제를 보았지만 현재 배열 이름을 유지하는 메서드를 찾고 싶습니다. 여기까지 내가 지금까지 가지고있는 것이있다. | 노드 1, 노드 2 - 내가 모든 목록이 어떤 상태를 가지고있는 노드 쉽게 구별 할 수 있도록 별도로 보관하고 싶습니다 .. 즉다른 배열 목록 반복하기

온라인 :

편집

오프라인 - 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); 
    } 

} 
+2

당신은 배열이 아니라 배열에 의해 뒷받침 된 목록을 가지고 있습니다. 왜 반복 전에 그들을 연결하지 않습니까? 꽤 싸구려입니다. 그렇지 않으면 가장 큰 목록을 반복하면서 경계에 대한 쓸모없는 논리 검사가 필요합니다. –

+0

"all"인 네 번째 목록을 유지하고 모든 노드를 추가해야하는 이유는 무엇입니까? – Stewart

+0

죄송합니다 모두 - 죄송 합니다만 - 나는 분명히해야합니다 ... 분리되어 있습니다. 온라인, 오프라인 및 알 수 없음이 각각의 목록에 포함되어 있으므로 어느 노드가 어떤 상태에 있는지 쉽게 구분할 수 있습니다. 여기에 표시되지 않은 것은 노드 상태가 약 30 초마다 업데이트된다는 것입니다. – Jon

답변

0

만약 내가 제대로 이해하고는, 당신이 원하는 것은 w/4 번째 목록을 사용하여 O를 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 

당신이 볼 수 있듯이, 그것은 선택적으로 각 목록

를 반복 처리

이 방법이 도움이되기를 바랍니다. 아마도 가장 큰 크기의 배열을 얻는 더 좋은 방법 일 것입니다.

당신이 원하는 것은 (목록 1 개 전체, 다음 목록 2와 마지막 목록 3)을 순서대로의 3을 반복 또는 일부 국가가, 음, 당신이

0

당신은 수도가 로직을 추가해야하는 경우 3 개의 별도 변수 대신에 상태의 맵을 요소에 보관하려고합니다. 자바 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 -> { 
     //... 
    }); 
}); 
0

당신은 시도 할 수 있습니다 이 기준 :

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(); 




} 
} 
0

당신이 시도 할 수 있습니다 :

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

    } 





} 
}