Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

:: (method reference)

Ссылка на метод — ещё более короткая замена лямбды, которая только вызывает метод.

Доступно с: Java 8

Синтаксис

ClassName::staticMethod
object::method
ClassName::instanceMethod
ClassName::new

Примеры

Четыре вида ссылок:

record Point(int x) {}
 
void main() {
    Function<String, Integer> parse = Integer::parseInt;
    Consumer<String> print = IO::println;
    Function<String, String> upper = String::toUpperCase;
    Function<Integer, Point> create = Point::new;
    print.accept("text");
    IO.println(parse.apply("42") + 1);
    IO.println(upper.apply("java"));
    IO.println(create.apply(7));
}

Результат:

text
43
JAVA
Point[x=7]

В потоке ссылки читаются как описание шагов:

void main() {
    List<String> raw = List.of(" 10", "7 ", " 3 ");
    int sum = raw.stream().map(String::trim).mapToInt(Integer::parseInt).sum();
    IO.println(sum);
}

Результат:

20

Примечания

String::length равносильно s -> s.length(), IO::println — x -> IO.println(x), ArrayList::new — () -> new ArrayList<>(). Если лямбда делает что-то ещё, кроме вызова одного метода, оставьте лямбду.

См. также

  • -> (lambda) — Лямбда-выражение — короткая запись функции, которую можно передать как значение.
  • Function — Функция, которая принимает значение типа `T` и возвращает значение типа `R`.
  • Stream.map() — Преобразует каждый элемент потока.

В учебнике

  • Ссылки на методы — Ссылки на методы в Java: оператор ::, ссылки на статические методы, методы объекта, методы произвольного объекта и конструкторы.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.