Главная страница
Навигация по странице:

  • Может ли лямбда-выражение быть в несколько строк

  • К каким переменным и как можно обращаться в теле лямбда-выражений

  • Как отсортировать список строк с помощью лямбда-выражения

  • Какова цель метода filter() в стримах

  • Для чего в стримах предназначен метод limit()

  • Для чего в стримах предназначен метод sorted()

  • Для чего в стримах предназначены методы flatMap(), flatMapToInt(), flatMapToDouble(), flatMapToLong()

  • Ревью 7. Ревью 7 - Функциональные Интерфейсы, Streams. Чем является Stream в контексте Java 3 Для чего нужен 3


    Скачать 84.11 Kb.
    НазваниеЧем является Stream в контексте Java 3 Для чего нужен 3
    АнкорРевью 7
    Дата19.01.2023
    Размер84.11 Kb.
    Формат файлаdocx
    Имя файлаРевью 7 - Функциональные Интерфейсы, Streams.docx
    ТипДокументы
    #894719
    страница6 из 9
    1   2   3   4   5   6   7   8   9

    Что такое лямбда? Как взаимосвязаны лямбда и функциональный интерфейс?


    Лямбда-выражение или просто лямбда в Java — упрощённая запись анонимного класса, реализующего функциональный интерфейс

    Лямбда-выражение представляет сокращенную запись анонимного класса.

    ShapeService rectangleService = new ShapeService() {

    @Override

    public double perimeter(double a, double b) {

    return 2 * (a + b);

    }

    };

    Эволюция в лямбда начинается с того, что опускается конструктор анонимного класса и имя метода интерфейса. Так как метод единственный в интерфейсе, то и его имя можно не упоминать. Параметры метода отделяются от тела метода оператором «стрелка»:

    ShapeService rectangleService = (double a, double b) -> {

    return 2 * (a + b);

    };

    Если тело метода состоит из одного оператора, то и фигурные скобки можно опустить.

    ShapeService rectangleService = (double a, double b) -> 2 * (a + b);

    Типы параметров метода также можно опустить, так как предполагается, что они известны из сигнатуры единственного абстрактного метода.

    ShapeService rectangleService = (a, b) -> 2 * (a + b);

    Применение лямбда-выражений становится возможным только для функциональных интерфейсов из-за единственного абстрактного метода, так как исчезает необходимость явно указывать имя метода.

    Может ли лямбда-выражение быть в несколько строк?


    Да. В данном случае тело после -> должно обрамляться фигурными скобками {}, каждая строчка заканчиваться точкой с запятой. Если лямбда-выражение возвращает результат, ключевое слово return также требуется.

    К каким переменным и как можно обращаться в теле лямбда-выражений?


    Доступ к переменным внешней области действия из лямбда-выражения очень схож к доступу из анонимных объектов. Можно ссылаться на:

    неизменяемые (r - не обязательно помеченные как final) локальные переменные;

    поля класса;

    статические переменные.

    К методам по умолчанию реализуемого функционального интерфейса обращаться внутри лямбда-выражения запрещено.

    Как отсортировать список строк с помощью лямбда-выражения?


    public static List sort(List list){

    Collections.sort(list, (a, b) -> a.compareTo(b));

    return list;

    }

    Какова цель метода filter() в стримах?


    Метод filter() является промежуточной операцией принимающей предикат, который фильтрует все элементы, возвращая только те, что соответствуют условию.

    Для чего в стримах предназначен метод limit()?


    Метод limit() является промежуточной операцией, которая позволяет ограничить выборку определенным количеством первых элементов.

    Для чего в стримах предназначен метод sorted()?


    Метод sorted() является промежуточной операцией, которая позволяет сортировать значения либо в натуральном порядке, либо задавая Comparator.

    Порядок элементов в исходной коллекции остается нетронутым - sorted() всего лишь создает его отсортированное представление.

    Для чего в стримах предназначены методы flatMap(), flatMapToInt(), flatMapToDouble(), flatMapToLong()?


    Метод flatMap() похож на map, но может создавать из одного элемента несколько. Таким образом, каждый объект будет преобразован в ноль, один или несколько других объектов, поддерживаемых потоком. Наиболее очевидный способ применения этой операции — преобразование элементов контейнера при помощи функций, которые возвращают контейнеры.

    Stream

    .of("H e l l o", "w o r l d !")

    .flatMap((p) -> Arrays.stream(p.split(" ")))

    .toArray(String[]::new);//["H", "e", "l", "l", "o", "w", "o", "r", "l", "d", "!"]

    flatMapToInt(), flatMapToDouble(), flatMapToLong() - это аналоги flatMap(), возвращающие соответствующий числовой стрим.
    1   2   3   4   5   6   7   8   9


    написать администратору сайта