Как инициализировать двумерный список статически?

Как я могу инициализировать многомерный список статически?

Это работает:

List<List<Integer>> list = new ArrayList<List<Integer>>();

Но я хотел бы запустить список с некоторыми статическими списками, такими как: (1,2,3), (4,5,6) и (7,8,9)

Ответ 1

Если вы создаете вспомогательный метод, код выглядит немного лучше. Например

public class Collections {
    public static <T> List<T> asList(T ... items) {
        List<T> list = new ArrayList<T>();
        for (T item : items) {
            list.add(item);
        }

        return list;
    }
}

а затем вы можете сделать (со статическим импортом)

List<List<Integer>> list = asList(
                             asList(1,2,3),
                             asList(4,5,6),
                             asList(7,8,9),
                           );

Почему я не использую Arrays.asList()

Arrays.asList() возвращает класс типа java.util.Arrays.ArrayList(это внутренний класс массивов). Проблема, которую я обнаружил, заключается в том, что ОЧЕНЬ легко думать, что вы используете java.lang.ArrayList, но их интерфейсы очень, очень разные.

Ответ 2

Вы можете сделать это, добавив в свой код статический блок.

private static List<List<Integer>> list = new ArrayList<List<Integer>>();
static {
  List<Integer> innerList = new ArrayList<Integer>(3);
  innerList.add(1);
  innerList.add(2);
  innerList.add(3);
  list.add(innerList);
  //repeat
}

Ответ 3

Вы можете сделать это следующим образом:

import static java.util.Arrays.*;

...

List<List<Integer>> list = asList(
    asList( 1, 2, 3 ),
    asList( 4, 5, 6 ),
    asList( 6, 7, 8 ) );