0

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]

私の配列内の値の値の数は、表示される配列の同じ 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;
}
4

2 に答える 2

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;
}
于 2016-03-23T08:45:39.180 に答える
0

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

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

したがって、単に行を移動します

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

ループ内。これにより、ループが実行されるたびに新しい内部リストが作成されます。

于 2016-03-23T08:46:30.043 に答える