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