Метод первого аргумента в Java
Когда слева от :: стоит имя класса,
а справа - не static-метод, первый
аргумент функционального интерфейса становится
объектом, у которого вызывают метод. Остальные
аргументы интерфейса идут параметрами метода.
Запись String::toUpperCase для
Function<String, String> эквивалентна
лямбде, которая берёт строку и вызывает у неё
toUpperCase. Для двух аргументов
подходит BiFunction:
import java.util.function.BiFunction;
import java.util.function.Function;
class Post {
String title;
Post(String title) {
this.title = title;
}
boolean startsWith(String prefix) {
return title.startsWith(prefix);
}
}
public class Main {
public static void main(String[] args) {
Function<String, String> upper = String::toUpperCase;
System.out.println(upper.apply("draft"));
Post post = new Post("Java tips");
BiFunction<Post, String, Boolean> check = Post::startsWith;
System.out.println(check.apply(post, "Java"));
}
}
Метод String::startsWith в
BiFunction<String, String, Boolean>
работает так же: первый аргумент apply
- строка, второй - префикс.
Дан код:
import java.util.function.Function;
class Article {
String body;
Article(String body) {
this.body = body;
}
int length() {
return body.length();
}
}
В main создайте статью с текстом
"Hi" и получите длину ее текста
отложенным вызовом. Выведите результат.