2016-03-23 18 views
0

私はここにJavaのListのリストを取得するコードを持っています。しかし、私の問題は今、私の配列内の値の値の数が表示される配列の同じ3グループがあるどのようにJavaのリストのリストを単一にする

[2012-01-04, 3 , 2012-02-04, 4, 2012-05-04, 3][2012-01-04, 3 , 2012-02-04, 4, 2012-05-04, 3][2012-01-04, 3 , 2012-02-04, 4, 2012-05-04, 3] 

例...私のサーバーで結果が再現可能だったです。
これは私のコードです。私を助けてください。

SortedSet<String> uniqueSet = new TreeSet<String>(arrlist); 
    ArrayList<ArrayList<String>> listOLists = new ArrayList<ArrayList<String>>(); 
    // List<String> flat = list.stream().flatMap(List::stream).collect(Collectors.toList()); 
    ArrayList<String> singleList = new ArrayList<String>(); 
    for(String date : uniqueSet) { 
    int counts = Collections.frequency(arrlist, date); 
    Logger.debug("date: "+ date + " counts: " +counts); 
     singleList.add(date); 
     singleList.add(Integer.toString(counts)); 
     listOLists.add(singleList); 

    } 
    Logger.debug("Sample List: " + listOLists); 
    return listOLists; 
} 

答えて

0

あなたの間違いは、ループの前に一度だけ内部リストを作成することです。次に、同じリストインスタンスを何度も外側のリストに挿入して、すべてのループでその単一のリストインスタンスを変更します。

この単一のリストインスタンスを変更すると、外側のリストのすべての出現が変更されます。

だから、単にループ内

ArrayList<String> singleList = new ArrayList<String>(); 

線を移動。これにより、各ループ実行時に新しい内部リストが作成されます。

+0

おかげで.... –

0

同じリストを修正して追加しています。ループ内で宣言したいと思うかもしれません。

SortedSet<String> uniqueSet = new TreeSet<String>(arrlist); 
    ArrayList<ArrayList<String>> listOLists = new ArrayList<ArrayList<String>>(); 
    // List<String> flat = list.stream().flatMap(List::stream).collect(Collectors.toList()); 
    for(String date : uniqueSet) { 
    int counts = Collections.frequency(arrlist, date); 
    Logger.debug("date: "+ date + " counts: " +counts); 
     ArrayList<String> singleList = new ArrayList<String>(); 
     singleList.add(date); 
     singleList.add(Integer.toString(counts)); 
     listOLists.add(singleList); 

    } 
    Logger.debug("Sample List: " + listOLists); 
    return listOLists; 
} 
+0

forループを追加するにはどうすればよいですか? –

関連する問題