0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В разработке иногда встречается задача "выпрямления" вложенных списков, то есть создания одного плоского списка из списка списков или списка массивов. В стримах за это отвечает метод flatMap(), который работает как показано в коде ниже.</p>
1
<p>В разработке иногда встречается задача "выпрямления" вложенных списков, то есть создания одного плоского списка из списка списков или списка массивов. В стримах за это отвечает метод flatMap(), который работает как показано в коде ниже.</p>
2
<p>flatMap() работает как отображение map, которое применяет к каждому элементу стрима переданную лямбду. Эта лямбда преобразует каждый элемент, в нашем случае список чисел, в стрим. Когда все элементы преобразованы в стримы, выполняется вторая часть flatMap, стримы объединяются в один.</p>
2
<p>flatMap() работает как отображение map, которое применяет к каждому элементу стрима переданную лямбду. Эта лямбда преобразует каждый элемент, в нашем случае список чисел, в стрим. Когда все элементы преобразованы в стримы, выполняется вторая часть flatMap, стримы объединяются в один.</p>
3
<p>Особенно часто flatMap() встречается в работе с файловой системой при чтении списка файлов и директорий, а так же при работе с содержимым файлов. Ниже мы разберем подобный пример, но если он вам покажется слишком сложным, то не переживайте, просто пропустите его и вернитесь позже.</p>
3
<p>Особенно часто flatMap() встречается в работе с файловой системой при чтении списка файлов и директорий, а так же при работе с содержимым файлов. Ниже мы разберем подобный пример, но если он вам покажется слишком сложным, то не переживайте, просто пропустите его и вернитесь позже.</p>
4
<p>Для примера посчитаем частоту слов в файле. Для этого прочитаем файл с помощью File.lines(), этот метод возвращает стрим состоящий из строк файла. Именно здесь нам понадобится flatMap() для обработки каждой строки.</p>
4
<p>Для примера посчитаем частоту слов в файле. Для этого прочитаем файл с помощью File.lines(), этот метод возвращает стрим состоящий из строк файла. Именно здесь нам понадобится flatMap() для обработки каждой строки.</p>
5
<p>Это маленькая программа, но в ней происходит очень много всего сразу. Разберем ее построчно.</p>
5
<p>Это маленькая программа, но в ней происходит очень много всего сразу. Разберем ее построчно.</p>
6
<ul><li>Конструкция try нужна для работы с такими ресурсами как файлы, она никак не влияет на нашу программу, поэтому не обращаем на нее внимание, она изучается позже.</li>
6
<ul><li>Конструкция try нужна для работы с такими ресурсами как файлы, она никак не влияет на нашу программу, поэтому не обращаем на нее внимание, она изучается позже.</li>
7
<li>Читается файл<em>README.md</em>построчно в переменную lines. Метод Files.lines возвращает Stream<String>.</li>
7
<li>Читается файл<em>README.md</em>построчно в переменную lines. Метод Files.lines возвращает Stream<String>.</li>
8
<li>Вызывается flatMap(), который преобразует набор строк в плоский список слов. Для этого внутри лямбды каждая строка разбивается на слова. Получившийся массив преобразуется в стрим с помощью Arrays.stream.</li>
8
<li>Вызывается flatMap(), который преобразует набор строк в плоский список слов. Для этого внутри лямбды каждая строка разбивается на слова. Получившийся массив преобразуется в стрим с помощью Arrays.stream.</li>
9
<li>Все слова приводятся к нижнему регистру, на случай если они были написаны по-разному. Это называется нормализацией данных.</li>
9
<li>Все слова приводятся к нижнему регистру, на случай если они были написаны по-разному. Это называется нормализацией данных.</li>
10
<li>Выполняется группировка слов по частоте.</li>
10
<li>Выполняется группировка слов по частоте.</li>
11
</ul>
11
</ul>