Лямбда как параметр метода в Java
Поведение часто приходит в метод извне: так список статей фильтруют разными правилами, не меняя код самого хранилища. Параметром указывают тип функционального интерфейса, а при вызове передают лямбду или готовую реализацию.
Сервис хранит заголовки и умеет отбирать их по правилу:
@FunctionalInterface
interface TitleRule {
boolean ok(String title);
}
class TitleStore {
void printMatching(TitleRule rule) {
String[] titles = {"api", "go", "java27"};
for (String title : titles) {
if (rule.ok(title)) {
System.out.println(title);
}
}
}
}
При вызове в метод передают лямбду - правило задаёт вызывающий код:
public class Main {
public static void main(String[] args) {
TitleStore store = new TitleStore();
store.printMatching(title -> title.length() >= 4);
}
}
Другое правило подставляется без правок TitleStore:
store.printMatching(title -> title.startsWith("j"));
Добавьте в TitleStore метод int countMatching(TitleRule rule),
который считает подходящие заголовки. В main
выведите число для правила «длина не меньше 3».