31

我有 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};.....);

我可以这样做吗?无论如何谢谢

4

6 回答 6

49

您可以使用双括号初始化:-

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

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

还要注意末尾的分号double-braces

于 2012-10-01T09:14:15.777 回答
26

你可以做

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

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

于 2012-10-01T09:14:07.830 回答
8

像这样的东西:

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

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

public MyClass(String name, String address, int age) {
...
}
于 2012-10-01T09:14:16.823 回答
3

您可以像这样实例化ArrayList

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

这将创建一个实际扩展的匿名内部类ArrayList,并带有一个调用add. 这显然是完全肮脏的,会让你的同事想伤害你,所以你应该Arrays.asList改用。:)

于 2012-10-01T09:14:26.270 回答
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;
}
于 2012-10-01T10:23:06.513 回答
0

以有效方式做到这一点的“最佳”方法是:

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

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

虽然它需要大量的打字,但你可以清楚地看到这更有效

另一种选择是使用谷歌番石榴(未测试效率):

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

另请注意,最后一种方法有一些缺点,如这里所讨论的。

于 2015-04-22T20:36:56.207 回答