Какой самый простой / короткий способ конвертировать Java 8 Stream
в массив?
java
arrays
java-8
java-stream
MC Emperor
источник
источник
Ответы:
Самый простой способ - использовать
toArray(IntFunction<A[]> generator)
метод со ссылкой на конструктор массива. Это предлагается в документации API для метода .Что он делает, так это находит метод, который принимает целое число (размер) в качестве аргумента и возвращает a
String[]
, что и делает (одна из перегрузок)new String[]
.Вы также можете написать свой собственный
IntFunction
:Цель
IntFunction<A[]> generator
- преобразовать целое число, размер массива, в новый массив.Пример кода:
Печать:
источник
toArray(sz -> new String[sz])
так что я не уверен, что кто-то действительно может сказать, какое решение должно или должно быть.sz -> new String[sz]
создает новую функцию, а ссылка на конструктор - нет. Я думаю, это зависит от того, насколько ты ценишь отток мусора.private
метод , который не может вызвать отток, и обе версии должны создать новый объект. Ссылка создает объект, который указывает непосредственно на целевой метод; лямбда создает объект, который указывает на сгенерированныйprivate
. Ссылка на конструктор все равно должна работать лучше из-за отсутствия косвенности и более легкой оптимизации виртуальной машины, но отток не имеет к этому никакого отношения.Если вы хотите получить массив потоков со значениями от 1 до 10 из потока, в вашем распоряжении есть IntStream.
Здесь мы создаем Stream с помощью метода Stream.of и конвертируем Stream в IntStream, используя mapToInt. Затем мы можем вызвать метод toStray от IntStream.
Здесь то же самое, без потока, используя только IntStream
источник
Вы можете преобразовать поток Java 8 в массив, используя этот простой блок кода:
Но давайте объясним подробнее, во-первых, давайте создадим список строк, заполненный тремя значениями:
Создайте поток из данного массива:
Теперь мы можем выполнить некоторые операции с этим потоком. Например:
и, наконец, преобразовать его в массив Java 8, используя эти методы:
1-классический метод (функциональный интерфейс)
2-лямбда-выражение
3- Ссылка на метод
Ссылка на метод Объяснение:
Это еще один способ написания лямбда-выражения, которое строго эквивалентно другому.
источник
Преобразовать текст в строковый массив, где каждое значение разделяется запятой, и обрезать каждое поле, например:
источник
Вы можете создать собственный коллектор, который преобразует поток в массив.
и быстрое использование
источник
Collectors.groupingBy
чтобы я мог сопоставить некоторый атрибут с массивами объектов по значению атрибута. Этот ответ дает мне именно это. Также @DidierL.Использование
toArray(IntFunction<A[]> generator)
метода действительно является очень элегантным и безопасным способом преобразования (или, точнее, сбора) потока в массив того же типа, что и поток.Однако, если тип возвращаемого массива не важен, простое использование
toArray()
метода и проще, и короче. Например:источник
источник
Попробуйте это онлайн: https://repl.it/@SmaMa/Stream-to-array
источник
источник
Вы можете сделать это несколькими способами. Все способы технически одинаковы, но использование Lambda упростит часть кода. Допустим, мы сначала инициализируем List с помощью String, назовем его person.
Теперь вы можете использовать любой из следующих способов.
Использование Lambda Expresiion для создания нового StringArray с определенным размером.
String [] stringArray = stream.toArray (size-> new String [size]);
Используя ссылку на метод напрямую.
String [] stringArray = stream.toArray (String [] :: new);
источник