forループを介して配列リストにサブリストを追加します

2014年12月02日に質問されました。  ·  閲覧回数 3.7k回  ·  ソース

user3628503 picture
2014年12月02日

forループで作成したサブリストをArrayListに追加するにはどうすればよいですか? サブリストの数を考慮すると、数百、場合によっては数千になる可能性があります。 addAllはパラメーターとしてリストを持っている必要があるので、以下のコードはダメだと知っていますが、それは私が求めているちょっとしたことです。

List<Integer> list1 = arrayList.subList(0, 3);
List<Integer> list2 = arrayList.subList(3, 6);
List<Integer> list3 = arrayList.subList(6, 9);
ArrayList<Integer> newArray = new ArrayList<Integer>();
for (int i = 0; i < 3; i++) {
    String listNum = "list" + i;
    newArray.addAll(listNum);
}

回答

Sergey Kalinichenko picture
2014年12月02日
3

ローカル変数をインデックスで「アドレス指定」することはできません。そのための配列が必要です。

List<Integer>[] list = new List<Integer>[] {
    arrayList.subList(0, 3)
,   arrayList.subList(3, 6)
,   arrayList.subList(6, 9)
};
ArrayList<Integer> newArray = new ArrayList<Integer>();
for (int i = 0; i < 3; i++) {
    newArray.addAll(list.get(i));
}

特定の例では、サブリストを配列に格納せずに、その場でサブリストを作成できます。

ArrayList<Integer> newArray = new ArrayList<Integer>();
for (int i = 0; i < 3; i++) {
    newArray.addAll(arrayList.subList(3*i, 3*(i+1)));
}
brso05 picture
2014年12月02日
0
List<List<Integer>> list = new ArrayList<List<Integer>>();
list.add(arrayList.subList(0, 3));
list.add(arrayList.subList(3, 6));
list.add(arrayList.subList(6, 9));
ArrayList<Integer> newArray = new ArrayList<Integer>();
for (int i = 0; i < list.size(); i++) {
    newArray.addAll(list.get(i));
}

リストのリストを作成し、そのリストをループして、各サブリストの内容をnewArrayに追加することができます。

josivan picture
2014年12月02日
0

リストのリストまたはリストの配列を使用しないのはなぜですか。

List<List<Integer>> finalList = Arrays.asList(list1, list2, list3);

for (List<Integer> list : finaList) {
    newArray.add(list);
}