Подтвердить что ты не робот

Как инициализировать статический 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};.....);

Могу ли я это сделать. спасибо в любом случае

4b9b3361

Ответ 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

также обратите внимание, что последний метод имеет некоторые недостатки, как обсуждалось здесь.