Возникли проблемы с пониманием функции Java 8 <> - PullRequest
0 голосов
/ 31 марта 2019

Поскольку я учусь использовать различные новые инструменты, я столкнулся с этим синтаксисом (Функция x -> ...), который мне трудно понять, и я хотел бы, чтобы кто-нибудь написал эквивалентный код, если это возможнотак что я могу понять это лучше.

Function<String, HashSet<String>> asSet = (String x) ->
      new HashSet<String>() {{
        do_something(x);
      }};

Любой блок кода, использующий более традиционный синтаксис, а не эту странную функцию, был бы очень признателен и полезен, чтобы помочь мне лучше понять Java!

Ответы [ 3 ]

1 голос
/ 31 марта 2019

Его можно заменить на анонимный класс:

Function<String, HashSet<String>> asSet = new Function<>() {
    @Override
    public HashSet<String> apply(String s) {
        return new HashSet<>() {{
            do_something(s);
        }};
    }
};

Вы просто реализуете метод apply из Function, который является функциональным интерфейсом :

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

Подробнее Что такое функциональный интерфейс в Java 8?

0 голосов
/ 31 марта 2019

Этот синтаксис называется Лямбда-выражения , он используется для упрощения реализации Функциональные интерфейсы .

Функциональные интерфейсы: это интерфейсы с одной функцией для реализации, например, вы можете написать:

// Java-программа для демонстрации функционального интерфейса

class Test {
    public static void main(String args[]) {
        // create anonymous inner class object 
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("New thread created");
            }
        }).start();
    }
}

или

// Java-программа для демонстрации реализации
// функциональный интерфейс с использованием лямбда-выражений

class Test {
    public static void main(String args[]) {

        // lambda expression to create the object 
        new Thread(() - > {
            System.out.println("New thread created");
        }).start();
    }
}
0 голосов
/ 31 марта 2019

Очень просто и без объяснения преимуществ использования Function s, вы можете представить себе, что ваша функция аналогична:

HashSet<String> anonymousMethod(String x) {
    return doSomething(x);
}

..., которая анонимно находится в вашемфункциональный объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...