如何在一行中初始化静态ArrayList <myclass> </myclass>

时间:2012-10-01 09:11:41

标签: java

我有MyClass为

MyClass(String, String, int);

我知道如何添加以这种方式添加到ArrayList:

MyClass.name = "Name";
MyClass.address = "adress";adress
MyClass.age = age;

然后添加到arrayList,如:

list.add(MyClass);

但现在我有许多静态形式的对象MyClass,我想添加

ArrayList<MyClass> list = new ArrayList<MyClass>({"Name","Address", age};.....);
我可以这样做吗?谢谢,无论如何

6 个答案:

答案 0 :(得分:41)

您可以使用double braces initialization: -

List<MyClass> list = new ArrayList<MyClass>() {
    {
        add(new MyClass("name", "address", 23));
        add(new MyClass("name2", "address2", 45));
    }
};

正如您所看到的,inner braces就像一个initializer块,用于一次性初始化list ..

另请注意double-braces

末尾的分号

答案 1 :(得分:22)

你可以做到

List<MyClass> list = Arrays.asList(
                         new MyClass("Name", "Address", age),
                         // many more
                     );

注意:这将创建一个无法更改其大小的列表。

答案 2 :(得分:8)

这样的事情:

List<MyClass> list = new ArrayList<MyClass>(Arrays.asList(new MyClass[] {new MyClass("Name", "Address", age}));

当然,你的类必须有这样的构造函数:

public MyClass(String name, String address, int age) {
...
}

答案 3 :(得分:3)

您可以像这样实例化ArrayList

new ArrayList<myclass>() {{
  add(new MyClass("Name", "Address", age));
}};

这会创建一个实际扩展ArrayList的匿名内部类,其初始化块调用add。这显然是完全肮脏的,会让你的同事想要伤害你,所以你应该使用Arrays.asList代替。 :)

答案 4 :(得分:1)

如果你想要的是最干净,最简单的初始化,你可能会这样:

    List<MyClass> list = MyClass.build(
        "Name", "Address", 51,  
        "a2", "c", 4,
        "v", "d", 2
    );

这使用了这种实用方法:

public static List<MyClass> build(Object... array) {
    List<MyClass> list = new ArrayList<Test>();
    for (int i=0; i<array.length-2; i+=3) {
        list.add(new MyClass((String)array[i], (String)array[i+1], (Integer)array[i+2]));
    }
    return list;
}

答案 5 :(得分:0)

&#34; best&#34;以有效的方式做到这一点的方法是:

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

 list.add(new MyClass("name", "address", 23));
 list.add(new MyClass("name2", "address2", 45));

虽然它需要大量输入,但您可以清楚地看到这更多efficient

另一种选择是使用谷歌guava(未经过效率测试):

ArrayList<MyClass> list = new ArrayList<MyClass>(
           new MyClass("name", "address", 23), 
           new MyClass("name2", "address2", 45) );

所需的导入为import static com.google.common.collect.Lists.newArrayList;

另外,你可以使用@Rohit Jain最初提出的双括号初始化: -

List<MyClass> list = new ArrayList<MyClass>() {
    {
        add(new MyClass("name", "address", 23));
        add(new MyClass("name2", "address2", 45));
    }
};

正如您所看到的,inner braces就像一个initializer块,用于一次性初始化list ..

请注意double-braces

末尾的分号

另请注意,最后一种方法有一些缺点,如here所述。