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

Инициализация ArrayList с некоторыми предопределенными значениями

У меня есть пример программы, как показано.

Я хочу, чтобы мой ArrayList symbolsPresent был инициализирован некоторыми предопределенными символами: ONE, TWO, THREE и FOUR.

symbolsPresent.add("ONE");
symbolsPresent.add("TWO");
symbolsPresent.add("THREE");
symbolsPresent.add("FOUR");

import java.util.ArrayList;

public class Test {

    private ArrayList<String> symbolsPresent = new ArrayList<String>();

    public ArrayList<String> getSymbolsPresent() {
        return symbolsPresent;
    }

    public void setSymbolsPresent(ArrayList<String> symbolsPresent) {
        this.symbolsPresent = symbolsPresent;
    }

    public static void main(String args[]) {    
        Test t = new Test();
        System.out.println("Symbols Present is" + t.symbolsPresent);

    }    
}

Возможно ли это?

4b9b3361

Ответ 1

попробуйте это

new String[] {"One","Two","Three","Four"};

или

List<String> places = Arrays.asList("One", "Two", "Three");

ARRAYS

Ответ 2

Инициализация двойной скобки является опцией:

List<String> symbolsPresent = new ArrayList<String>() {{
   add("ONE");
   add("TWO");
   add("THREE");
   add("FOUR");
}};

Обратите внимание, что аргумент String generic type необходим в назначенном выражении, как указано JLS §15.9

Это ошибка времени компиляции, если выражение создания экземпляра класса объявляет анонимный класс, используя форму "< > " для аргументов типа класса.

Ответ 4

Вы также можете использовать синтаксис varargs, чтобы сделать ваш код более чистым:

Используйте перегруженный конструктор:

ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c"));

Подкласс ArrayList в модуле utils:

public class MyArrayList<T> extends ArrayList<T> {
    public MyArrayList(T... values) {
        super(Arrays.asList(values));
    }
}

ArrayList<String> list = new MyArrayList<String>("a", "b", "c");

Или используйте статический метод factory (мой предпочтительный подход):

public class Utils {
  public static <T> ArrayList<T> asArrayList(T... values) {
    return new ArrayList<T>(Arrays.asList(values));
  }
}

ArrayList<String> list = Utils.asArrayList("a", "b", "c");

Ответ 5

import com.google.common.collect.Lists;

...


ArrayList<String> getSymbolsPresent = Lists.newArayList("item 1", "item 2");

...

Ответ 6

Personnaly Мне нравится делать все инициализации в конструкторе

public Test()
{
  symbolsPresent = new ArrayList<String>();
  symbolsPresent.add("ONE");
  symbolsPresent.add("TWO");
  symbolsPresent.add("THREE");
  symbolsPresent.add("FOUR");
}

Изменить: это выбор, и другие предпочитают инициализировать декларацию. Оба действительны, я выбрал конструктор, потому что там возможны все типы инициализаций (если вам нужен цикл или параметры,...). Однако я инициализирую константы в объявлении сверху в источнике.
Самое главное - следовать правилу, которое вам нравится и быть последовательным в наших классах.

Ответ 7

Вы можете использовать Java 8 Stream API.
Вы можете создать поток объектов и собрать их в виде списка.

private List<String> symbolsPresent = Stream.of("ONE", "TWO", "THREE", "FOUR")
    .collect(Collectors.toList());

Ответ 8

Кроме того, если вы хотите, чтобы List List был доступен только для чтения (генерирует исключение UnsupportedOperationException, если оно изменено):

List<String> places = Collections.unmodifiableList(Arrays.asList("One", "Two", "Three"));

Ответ 9

Я бы предложил использовать Arrays.asList() для однострочной инициализации. Для разных способов объявления и инициализации списка вы также можете ссылаться на Инициализация ArrayList в Java

Ответ 10

Я использую общий класс, который наследует от ArrayList и реализует конструктор с параметром с переменным числом или аргументами:

public class MyArrayList<T> extends ArrayList<T> {
    public MyArrayList(T...items){
        for (T item : items) {
            this.add(item);
        }
    }
}

Пример:

MyArrayList<String>myArrayList=new MyArrayList<String>("s1","s2","s2");

Ответ 11

public static final List<String> permissions = new ArrayList<String>() {{
    add("public_profile");
    add("email");
    add("user_birthday");
    add("user_about_me");
    add("user_location");
    add("user_likes");
    add("user_posts");
}};

Ответ 12

Если вы просто хотите инициализировать вне любого метода, используйте блоки инициализатора:

import java.util.ArrayList;

public class Test {
private ArrayList<String> symbolsPresent = new ArrayList<String>();

// All you need is this block.
{
symbolsPresent = new ArrayList<String>();
symbolsPresent.add("ONE");
symbolsPresent.add("TWO");
symbolsPresent.add("THREE");
symbolsPresent.add("FOUR");
}


public ArrayList<String> getSymbolsPresent() {
    return symbolsPresent;
}

public void setSymbolsPresent(ArrayList<String> symbolsPresent) {
    this.symbolsPresent = symbolsPresent;
}

public static void main(String args[]) {    
    Test t = new Test();
    System.out.println("Symbols Present is" + t.symbolsPresent);

}    
}