Вечер добрый. Нашёл вот такую прекрасную строку
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?
Метод reduce это операция свертки, маленький кусочек функционального программирования в java.
reduce это функция высшего порядка, она применяется к коллекции, принимает на вход 2 аргумента, первый - аккумулятор, это любой объект, в котором вы будете хранить результирующее значение, а второй - лямбда функция свертки, она применяется поочередно ко всем элементам стрима.
Лямбда функция свертки в качестве параметров принимает аккумулятор и один из элементов массива и возвращает аккумулятор.
Лямбда из Вашего примера конкатенирует аккумулятор и элемент массива последовательно, образуя единую строку, первоначально аккумулятор при этом содержал пустую строку.
На первой итерации аргументами лямбды были пустая строка и первая строка из массива, Вы их сконкатенировали и возвращаете из функции.
На второй итерации первым аргументом будет то, что вернула лямбда в пункте 1, те. аккумулятор, в котором лежит значение, второй аргумент - второй элемент сворачиваемой коллекции.
И так дале, пока не обойдет всю коллекцию
как то так
Продвижение своими сайтами как стратегия роста и независимости