如何在一行中初始化静态ArrayList

我有MyClass

MyClass(String, String, int); 

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

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

然后添加到arrayList,如:

 list.add(MyClass); 

但是现在我有许多以静态forms存在的对象MyClass,我想添加

 ArrayList list = new ArrayList({"Name","Address", age};.....); 

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

你可以使用双括号初始化 : –

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

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

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

你可以做

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

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

像这样的东西:

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

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

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

您可以像这样实例化ArrayList

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

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

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

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

这使用了这个实用方法:

 public static List build(Object... array) { List list = new ArrayList(); for (int i=0; i 

以有效的方式实现这一目标的“最佳”方式是:

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

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

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

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

必需的导入是import static com.google.common.collect.Lists.newArrayList;

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

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

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

注意double-braces末端的分号

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