如何静态初始化二维列表?

cod*_*ody 17 java initialization list arraylist multidimensional-array

如何静态初始化多维列表?

这有效:

List<List<Integer>> list = new ArrayList<List<Integer>>();
Run Code Online (Sandbox Code Playgroud)

但我想用一些静态列表初始化列表,如:(1,2,3),(4,5,6)和(7,8,9)

Aug*_*sto 14

如果您创建一个帮助方法,代码看起来更好一点.例如

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以做(​​使用静态导入)

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

为什么我不使用Arrays.asList()

Arrays.asList()返回java.util.Arrays.ArrayList类型的类(它是Arrays的内部类).我发现的问题是,很容易认为一个人正在使用java.lang.ArrayList,但他们的界面非常非常不同.


x4u*_*x4u 8

你可以这样做:

import static java.util.Arrays.*;
Run Code Online (Sandbox Code Playgroud)

...

List<List<Integer>> list = asList(
    asList( 1, 2, 3 ),
    asList( 4, 5, 6 ),
    asList( 6, 7, 8 ) );
Run Code Online (Sandbox Code Playgroud)


Jus*_*KSU 6

您可以通过在代码中添加静态块来实现.

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
}
Run Code Online (Sandbox Code Playgroud)