:: (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: оператор ::, ссылки на статические методы, методы объекта, методы произвольного объекта и конструкторы.