Есть ли в Java служебный метод, который генерирует список или массив указанной длины со всеми элементами, равными указанному значению (например, ["foo", "foo", "foo", "foo", "foo"])?
86
Вы можете использовать Collections.nCopies
. Обратите внимание, что это копирует ссылку на данный объект, а не на сам объект. Если вы работаете со строками, это не имеет значения, потому что они в любом случае неизменяемы.
List<String> list = Collections.nCopies(5, "foo");
System.out.println(list);
[фу, фу, фу, фу, фу]
Для массива вы можете использовать Arrays.fill (Object [] a, Object val)
String[] strArray = new String[10]; 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]);
источник
String[] strArray = new String[5]; Arrays.fill(strArray, "foo");
. Есть ли однострочное решение?Версия, которую можно использовать для примитивных массивов (Java 8):
DoubleStream.generate(() -> 123.42).limit(777).toArray(); // returns array of 777 123.42 double vals
Обратите внимание, что он возвращается
double[]
, а неDouble[]
Работает для IntegerStream, DoubleStream, LongStream
UPD
а для дупсов вы можете использовать:
Stream.generate(() -> "value").limit(400).toArray()
Никаких дополнительных библиотек не требуется, одна строка
источник
Если ваш объект не является неизменяемым или непрозрачным для ссылок, вы можете использовать
Stream.generate(YourClass::new).limit(<count>)
и соберите его в список
или в массив
.toArray(YourClass[]::new)
источник
Используя
IntStream
, вы можете сгенерировать диапазон целых чисел, сопоставить их с нужным элементом и собрать его в виде списка.List<String> list = IntStream.rangeClosed(0, 5) .mapToObj(i -> "foo") .collect(Collectors.toList());
Или как массив
String[] arr = IntStream.rangeClosed(0, 5) .mapToObj(i -> "foo") .toArray(String[]::new);
источник