Как инициализировать статический ArrayList <myclass> в одной строке
У меня есть 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};.....);
Могу ли я это сделать. спасибо в любом случае
Ответы
Ответ 1
Вы можете использовать инициализацию двойных скобок: -
List<MyClass> list = new ArrayList<MyClass>() {
{
add(new MyClass("name", "address", 23));
add(new MyClass("name2", "address2", 45));
}
};
Как вы можете видеть, inner braces
аналогичен блоку initializer
, который используется для инициализации list
за один раз.
Также обратите внимание на запятую в конце вашего double-braces
Ответ 2
Вы можете сделать
List<MyClass> list = Arrays.asList(
new MyClass("Name", "Address", age),
// many more
);
Примечание. Это создаст список, в котором вы не сможете изменить его размер.
Ответ 3
Что-то вроде этого:
List<MyClass> list = new ArrayList<MyClass>(Arrays.asList(new MyClass[] {new MyClass("Name", "Address", age}));
Конечно, у вашего класса должен быть такой конструктор:
public MyClass(String name, String address, int age) {
...
}
Ответ 4
Вы можете создать экземпляр ArrayList
следующим образом:
new ArrayList<myclass>() {{
add(new MyClass("Name", "Address", age));
}};
Это создает анонимный внутренний класс, который фактически расширяет ArrayList
с помощью блока инициализации, который вызывает add
. Это, очевидно, совершенно грязно, и ваши коллеги захотят причинить вам вред, поэтому вместо этого вы должны использовать Arrays.asList
.:)
Ответ 5
Если вам нужна самая чистая и простая инициализация, вы можете иметь следующее:
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;
}
Ответ 6
"Лучший" способ сделать это эффективным способом:
List<MyClass> list = new ArrayList<MyClass>();
list.add(new MyClass("name", "address", 23));
list.add(new MyClass("name2", "address2", 45));
хотя для этого требуется много ввода, но, как вы можете ясно видеть, это более эффективно
Другой альтернативой может быть использование google 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
также обратите внимание, что последний метод имеет некоторые недостатки, как обсуждалось здесь.