String[] arr={"121","4545","45456464"};
Arrays.stream(arr).filter(s->s.length()>4).toArray(String[]::new);
Может кто-нибудь сказать мне точно , что происходит сtoArray(String[]::new)
в фрагменте кода выше.Использование фильтра в потоках
String[] arr={"121","4545","45456464"};
Arrays.stream(arr).filter(s->s.length()>4).toArray(String[]::new);
Может кто-нибудь сказать мне точно , что происходит сtoArray(String[]::new)
в фрагменте кода выше.Использование фильтра в потоках
The toArray
создает String[]
, содержащий результат filter
в вашем случае все строки, длина которых больше 4. filter
возвращает Stream
и поэтому вы преобразуя его в массив.
Для печати отфильтрованного результата, а не хранить его в массив
Arrays.stream(arr).filter(s -> s.length() > 4).forEach(System.out::println);
Как напечатать эту строку? –
Вы имеете в виду вместо того, чтобы хранить его обратно в 'String []' или как печатать массив в целом. Я обновил ответ, чтобы показать, как вы можете распечатать поток. –
Если значение хранится в String, как указано в вопросе, и какова ссылка на эту строку и как получить к ней доступ? –
String[]::new
фактически такой же, как size -> new String[size]
. Новый String[]
создан с тем же размером, что и количество элементов после применения filter
к Stream
. См. Также javadoc от Stream.toArray
String[]::new
является ссылкой на нового оператора String[]
. Это синтаксис Java-8. toArray
метод Streams
принимает IntFunction<A[]>
как генератор для массива, в котором будут собираться элементы потока. Это то же самое, что и написание:
Arrays.stream(arr).filter(s->s.length()>4).toArray(size-> { return new Integer[size]; });
Итак, это вопрос о 'filter' или about' toArray'? –
Возможный дубликат [Как преобразовать поток Java 8 в массив?] (Http://stackoverflow.com/questions/23079003/how-to-convert-a-java-8-stream-to-an-array) –