Любой способ вставить анонимный массив в коллекцию? - PullRequest
3 голосов
/ 09 сентября 2010

Я нашел много записей здесь, которые говорят

someFunc(new int[]{1,2,3});

работает для вызова методов и использования в цикле for / each.

// ======

Как насчет назначения в коллекцию?

Я пробовал это:

ArrayList<int[]> data = new ArrayList<int[]>();
data.add(new int[]{21, 19629});

и я получаю "ожидаемый идентификатор" и "недопустимое начало типа".

Есть ли что-нибудь, что я могу сделать, чтобы заставить эту работу?

Ответы [ 5 ]

1 голос
/ 09 сентября 2010

Самый простой способ создать список из массива:

List<String> myList = Arrays.asList("Hello", "There", "Foo", "Bar);

Обратите внимание, что список имеет фиксированный размер и поддерживается входным массивом, поэтому изменения в списке фактически записывают в массив.Добавление или удаление элементов, вероятно, приведет к исключению UnsupportedOperationException.Если вы собираетесь возиться с массивом, например добавлять или удалять элементы, вам может потребоваться скопировать элементы в другой список

1 голос
/ 09 сентября 2010

Вы составили список массивов. Это действительно было то, что вы хотели, или вы хотели спросить о чем-то вроде

ArrayList<Integer> data = new ArrayList<Integer>();
data.add(new int[]{1,2,3});

В любом случае, ознакомьтесь с классами Arrays и Collections - они содержат множество утилит, которые пригодятся в подобных случаях.

0 голосов
/ 09 сентября 2010

Это может быть ограничением синтаксиса языка или ошибкой в ​​спецификации того, что создание идентификатора находится перед созданием выражения при разборе синтаксиса вызова метода. Не смешивайте объявление анонимного массива внутри вызова метода.

data.add (new int [] {21, 19629});

и я получаю "ожидаемый идентификатор" и "незаконное начало типа".

«Ожидаемый идентификатор» в data.add (...), вероятно, вызван тем, что компилятор ожидает идентификатор и находит выражение, которое разрешается в анонимный экземпляр. Есть несколько мест, где этот синтаксис приемлем, но я не уверен, почему data.add () нуждается в идентификаторе.

«Недопустимое начало типа» может заключаться в том, что компилятор считает, что выражение является объявлением анонимного типа, но синтаксис не допускает этого при вызове метода.

Попробуйте создать его с помощью переменной, затем передайте переменную как метод arg.

int[] nums = new int[] {0,1,2};   
data.add(nums);

В поисках дополнительных особенностей грамматики ArrayList.add () я нашел этот ответ на похожую проблему кто-то изучал ArrayList. JavaGlossary имеет хороший набор ошибок времени компиляции .

0 голосов
/ 09 сентября 2010

На самом деле, этот код работает, если вы хотите составить список таблицы целых чисел.

public static void main(String[] args) {
    List<int[]> data = new ArrayList<int[]>();
    data.add(new int[]{21, 19629})
    for(int[] tab : data){//I loop each tab (only one here)
        for(int i: tab){//I loop each values
            System.out.println(i);
        }
    }

}

печать 21 19629

0 голосов
/ 09 сентября 2010

Извлечение Гуава , особенно часть коллекций Google.

Некоторые классы коллекций определяют статический метод of (...) , который будет добавлятьвсе объекты, переданные в эту коллекцию.

В сочетании со статическим импортом это позволяет очень краткие инициализации сбора данных на лету.

Например,

import static com.google.common.collect.ImmutableList.of;
...

someFunc(of("abc","def","ghi"));

вызовет someFunc со списком строк.

...