Я думаю, вы используете неправильную концепцию ссылки на метод.
Ссылка на метод - это отличный синтаксис для вызова метода, как если бы он был лямбда-выражением (java 8+ выполнит все преобразования):
Вот пример:
public class Foo {
private static void printConditionally8(List<Person>persons, Predicate<Person> f) {
persons.stream().filter(f).forEach(p -> System.out.print(p + " is here"));
}
private static Boolean myFilter(Person p) {
return p.age > 18;
}
public static void main(String[] args) {
List<Person> persons = ... // create a list of persons
printConditionally8(persons, Foo::myFilter);
}
}
Обратите внимание, как основной метод действительно вызывает printConditionally8
. Он передает ссылку на метод myFilter как «анонимный класс», который реализует интерфейс Predicate
.