Как работает строка кода? Лямбда, reduce

112
22 ноября 2020, 02:10

Вечер добрый. Нашёл вот такую прекрасную строку

String content = Files.lines(Paths.get(fileName)).reduce("",(a,b) -> a + "\n" + b);

Знаю, что берёт файл по пути fileName и записывает его в строку включая переходы на новые. Но интересно, как работает сам код. Files, Paths - по сути же обновлённый старый класс File Files.lines - хз (хочу знать) как, но считывает весь файл, через ctrl+click (пользуюсь IDEA) особо ничего не понял.

А ещё этот reduce - можно кратко что это такое и как работает? Первый параметр вообще не понял, а во втором вроде как лямбда - выражение. В скобках параметры, стрелка указывает на функц. часть? Если a и b - строки, которые объединяются, то каким образом и почему их 2?

Answer 1

Метод reduce это операция свертки, маленький кусочек функционального программирования в java.

reduce это функция высшего порядка, она применяется к коллекции, принимает на вход 2 аргумента, первый - аккумулятор, это любой объект, в котором вы будете хранить результирующее значение, а второй - лямбда функция свертки, она применяется поочередно ко всем элементам стрима.

Лямбда функция свертки в качестве параметров принимает аккумулятор и один из элементов массива и возвращает аккумулятор.

Лямбда из Вашего примера конкатенирует аккумулятор и элемент массива последовательно, образуя единую строку, первоначально аккумулятор при этом содержал пустую строку.

  1. На первой итерации аргументами лямбды были пустая строка и первая строка из массива, Вы их сконкатенировали и возвращаете из функции.

  2. На второй итерации первым аргументом будет то, что вернула лямбда в пункте 1, те. аккумулятор, в котором лежит значение, второй аргумент - второй элемент сворачиваемой коллекции.

  3. И так дале, пока не обойдет всю коллекцию

как то так

READ ALSO
Duplicate class android.arch.lifecycle.ViewModelStoreOwner

Duplicate class android.arch.lifecycle.ViewModelStoreOwner

я добавил TabbedActivity и теперь мой проект не работаетПри билде приложения я получаю такую ошибку

109
Добавление в данных в List<> Java

Добавление в данных в List<> Java

Есть такая конструкция:

104
Как работают исключения?

Как работают исключения?

Почему вот этот код выводит в консоль:

88
Ошибка ClassNotFoundException в методе readObject()

Ошибка ClassNotFoundException в методе readObject()

Мне надо десериализовать объекты в список, но у меня вылазит ошибка

117