Как я могу инициализировать коллекцию и добавлять данные в одну строку?

В С# я могу создать какую-то коллекцию и инициализировать ее данными в одной строке.

var foo = new List<string> {"one","two","three"};

Есть ли эквивалентный способ сделать это в Java?

Ответ 1

Если вам нужен только для чтения List

List<String> numbers = Arrays.asList("one","two","three");

// Can't add since the list is immutable
numbers.add("four"); // java.lang.UnsupportedOperationException

Если вы хотите изменить List позже.

List<String> numbers2 = new ArrayList<String>(
                            Arrays.asList("one","two","three"));
numbers2.add("four");

System.out.println(numbers2); // [one, two, three, four]

Ответ 2

Я предпочитаю делать это, используя библиотеку Guava (ранее называемую Google Collections), которая устраняет необходимость записи типа вниз снова и имеет всевозможные способы добавления данных сразу.

Пример: List<YourClass> yourList = Lists.newArrayList();

Или с добавлением данных: List<YourClass> yourList = Lists.newArrayList(yourClass1, yourclass2);

То же самое работает для всех других коллекций и их различных реализаций. Другой пример: Set<String> treeSet = Sets.newTreeSet();

Вы можете найти его на https://code.google.com/p/guava-libraries/

Ответ 3

Вы можете использовать Arrays.asList(T... a)

List<String> foo = Arrays.asList("one","two","three");

Как упоминает Борис в комментариях, результирующий List является неизменным (т.е. только для чтения). Вам нужно будет преобразовать его в ArrayList или аналогичный, чтобы изменить коллекцию:

List<String> foo = new ArrayList<String>(Arrays.asList("one","two","three"));

Вы также можете создать List с помощью анонимного подкласса и инициализатора:

List<String> foo = new ArrayList<String>() {
    {
        add("one");
        add("two");
        add("three");
    }
};

Ответ 4

List<String> list = Arrays.asList("one","two","three")

Ответ 5

List<String> numbers = Arrays.asList("one","two","three");

Как прокомментировал Борис, он делает ваш numbers неизменным.

Да, вы можете, но с двумя строками.

List<String> numbers= new ArrayList<String>();
Collections.addAll(numbers,"one","two","three");

Если вы все еще хотите только в одной строке, Gauva

List<String> numbers= Lists.newArrayList("one","two","three");

Ответ 6

Лучшее, что я смог придумать, это:

final List<String> foo = new ArrayList<String>() {{
  add("one");
  add("two");
  add("three");
}};

В основном, это говорит о том, что вы создаете анонимный подкласс класса ArrayList, который затем статически инициализируется с помощью "one", "two", "three".