2016-08-16 7 views
1

ノードの状態を収集するために、大きさの異なる3つの配列がありますが、それぞれを作成する代わりに1つのループですべてを繰り返していきたいと思います。私は配列を整数として命名し、while/forループとインクリメントを行う例を見てきましたが、現在の配列名を保持するメソッドを見つけたいと思います。ここまで私がこれまで持っていたことがあります。異なる配列リストをループする

EDIT:私はどのような状態...つまり

オンライン持っているもののノード容易に区別されるように区切るすべてのリストを維持したいと思います - ノード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

「すべて」の4番目のリストを保持し、それにすべてのノードを追加するだけではどうですか? – Stewart

+0

申し訳ありませんすべて - 私はもっと明確にすべきです...私はそれらを分けておきたいと思います。Online、Offline、Unknownはそれぞれ独自のリストに入っていますので、どのノードがどのステータスになっているかを簡単に分けることができます。ここに表示されていないのは、ノードステータスが約30秒ごとに更新されるということです。 – Jon

答えて

0

は、あなたが欲しいのは1 for-loopに3つのリストを反復処理するのw /第四のリストを使用してO、あなたはこれを達成することができる方法があるさ:

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つの別々の変数を持つ代わりに、要素の状態のマップを保持したい。あなたが試すことができ

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

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

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

あなたは状況によって要素を反復処理する必要がある場合は、あなたがこれを行うことができます:あなたは、Java 8とgetNodes()Collectionを返し持ってと仮定すると、あなたはこのような何かを行うことができますこのことにより、:

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

    } 





} 
} 
関連する問題