Что обозначает это выражение?
private static final Predicate<Object> removeDotPred = symbol -> !MULTI_ARGS_SIGNAL.equals(symbol);
В частности, интересно, что значит знак "->".
Что обозначает это выражение?
private static final Predicate<Object> removeDotPred = symbol -> !MULTI_ARGS_SIGNAL.equals(symbol);
В частности, интересно, что значит знак "->".
В Java 8 появились лямбда выражения.
Lambda-выражения – это что-то вроде анонимных функций. Если попроще — это метод без объявления, т.е. без модификаторов доступа, возвращающие значение и имя. Они позволяют написать метод и сразу же использовать его.
Lambda-выражения в Java обычно имеют следующий синтаксис
(аргументы) -> {тело}
Например:
(арг1, арг2...) -> { тело }
(тип1 арг1, тип2 арг2...) -> { тело }
Далее идет несколько примеров настоящих Lambda-выражений:
(int a, int b) -> { return a + b; }
() -> System.out.println("Hello World"); // Почему тут нет фигурных скобок - написано ниже
(String s) -> { System.out.println(s); } // Фигурные скобки в данном случае не обязательны
() -> 42 // Почему тут нет фигурных скобок - написано ниже
() -> { return 3.1415 };
Структура lambda-выражений может быть разной:
(int a) можно записать и так (a)Параметры заключаются в круглые скобки и разделяются запятыми.
Пример: (a, b) или (int a, int b) или (String a, int b, float c)
Если входных параметров нет, то нужно использовать пустые круглые скобки.
Пример: () -> 42
Когда параметр один, если тип не указывается явно, скобки можно опустить.
Пример: a -> return a*a
return.return (в противном случае типом возвращаемого значения будет void).В Вашем случае symbol -> !MULTI_ARGS_SIGNAL.equals(symbol); - это один входной параметр symbol, а тело состоит из одного оператора, а значит можно не указывать ключевое слово return, но оно подразумевается. По старому это будет как-то так:
public boolean Test(symbol) {
return !MULTI_ARGS_SIGNAL.equals(symbol);
}