Неизвестное выражение stream [закрыт]

199
13 января 2020, 03:20
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 9 месяцев назад.

Читал всякие примеры по java и наткнулся на такой вот код:

public List<String> list() {
        return model.stream()
                .map(User::getName)
                .collect(Collectors.toList());
    }

Может кто-нибудь объяснить что тут вообще происходит, как я понял идёт возврат списка имён класса User или что-то другое? Где об этом всём можно почитать, посмотреть?

Answer 1

Это Stream API. Оно предназначено для работы со структурами данных, в основном с коллекциями и массивами.

Краткая выжимка:

Stream — это объект для универсальной работы с данными. Мы указываем, какие операции хотим провести, при этом не заботясь о деталях реализации. Например, взять элементы из списка сотрудников, выбрать тех, кто младше 40 лет, отсортировать по фамилии и поместить в новый список.

Не знаю, какой тип у model, но предположу, что List. В данном примере создается стрим из экземпляров User хранящихся в листе - model.stream().

Потом созданный стрим "мапиться" - изменяется на другой стрим с другими значениями с помощью map.

Метод map применяет функцию к каждому элементу и затем возвращает стрим, в котором элементами будут результаты функции.

Метод map принимает лямбда выражение(которое соответствует интерфейсу Function) и возвращает значение, которое получается после применения выражения к каждому элементу стрима. К каждому элементу стрима(т.е. к экземплярам User) применяется User.getName(), и вместо стрима с User получается стрим из переменных name User.

После этого стрим "собирается в список" с помощью collect(Collectors.toList()).

С его помощью можно собрать все элементы в список, множество или другую коллекцию, сгруппировать элементы по какому-нибудь критерию, объединить всё в строку и т.д.

На самом деле, у вас в примере очень простой стрим, бывают намного сложнее. Чтобы понять как работают стримы советую прочитать книги по функциональной Java, или в крайнем случае циклы статей по стримам, например этот или этот. Также есть хороший мини-справочник по Stream API, но его будет сложно понять если не знаком со стримами.

В итоге из коллекции [User1, User2, User3] получится коллекция ["Вася", "Петя", "Вова"].

READ ALSO
Как убрать SeekBar элемент из PlaybackTransportControlGlue?

Как убрать SeekBar элемент из PlaybackTransportControlGlue?

Разбираюсь с leanback либойСтоит задача реализовать плеер для стримов

126
Почему checkBox не isChecked

Почему checkBox не isChecked

Подскажите почему когда я закрываю приложение и снова открываю то у меня checkBox не становятся isChecked

134
Доступ переменной в ООП JS

Доступ переменной в ООП JS

В открытом методе init()

146
HTML5 видео не работает loop когда много

HTML5 видео не работает loop когда много

Есть страница где идут 6 html5 видео подряд, у всех просписано loop="1"Каждое видео запускается когда находится в зоне видимости Но два последние...

147