Java: Стримы
Теория: Выравнивание данных (Flat Map)
В разработке иногда встречается задача "выпрямления" вложенных списков, то есть создания одного плоского списка из списка списков или списка массивов. В стримах за это отвечает метод flatMap(), который работает как показано в коде ниже.
flatMap() работает как отображение map, которое применяет к каждому элементу стрима переданную лямбду. Эта лямбда преобразует каждый элемент, в нашем случае список чисел, в стрим. Когда все элементы преобразованы в стримы, выполняется вторая часть flatMap, стримы объединяются в один.
Особенно часто flatMap() встречается в работе с файловой системой при чтении списка файлов и директорий, а так же при работе с содержимым файлов. Ниже мы разберем подобный пример, но если он вам покажется слишком сложным, то не переживайте, просто пропустите его и вернитесь позже.
Для примера посчитаем частоту слов в файле. Для этого прочитаем файл с помощью File.lines(), этот метод возвращает стрим состоящий из строк файла. Именно здесь нам понадобится flatMap() для обработки каждой строки.
Это маленькая программа, но в ней происходит очень много всего сразу. Разберем ее построчно.
- Конструкция
tryнужна для работы с такими ресурсами как файлы, она никак не влияет на нашу программу, поэтому не обращаем на нее внимание, она изучается позже. - Читается файл README.md построчно в переменную
lines. МетодFiles.linesвозвращаетStream<String>. - Вызывается
flatMap(), который преобразует набор строк в плоский список слов. Для этого внутри лямбды каждая строка разбивается на слова. Получившийся массив преобразуется в стрим с помощьюArrays.stream. - Все слова приводятся к нижнему регистру, на случай если они были написаны по-разному. Это называется нормализацией данных.
- Выполняется группировка слов по частоте.
Рекомендуемые программы
Завершено
0 / 10

