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

Создание списка с повторяющимся элементом

Есть ли в Java метод утилиты, который генерирует список или массив указанной длины со всеми элементами, равными указанному значению (например, [ "foo" , "foo" , "foo" , "foo" , "foo" ])?

4b9b3361

Ответ 1

Вы можете использовать Collections.nCopies. Обратите внимание, что это копирует ссылку на данный объект, а не сам объект. Если вы работаете со строками, это не имеет значения, потому что они неизменны в любом случае.

List<String> list = Collections.nCopies(5, "foo");
System.out.println(list);
[foo, foo, foo, foo, foo]

Ответ 2

Для массива вы можете использовать Arrays.fill(Object [] a, Object val)

String[] strArray = new String[10];
Arrays.fill(strArray, "foo");

и если вам нужен список, просто используйте

List<String> asList = Arrays.asList(strArray);

Затем я должен использовать две строки: String [] strArray = new String [5]; Arrays.fill(strArray, "foo") ;. Есть ли однострочное решение?

Вы можете использовать Collections.nCopies(5, "foo") как однострочное решение для получения списка:

List<String> strArray = Collections.nCopies(5, "foo");

или объедините его с toArray чтобы получить массив.

String[] strArray = Collections.nCopies(5, "foo").toArray(new String[5]);

Ответ 3

Версия, которую вы можете использовать для примитивных массивов (Java 8):

DoubleStream.generate(() -> 123.42).limit(777).toArray(); // returns array of 777 123.42 double vals

Обратите внимание, что он возвращает double[], а не Double[]

Работает для IntegerStream, DoubleStream, LongStream