В Java 8 есть (в 2012 уже были (может и раньше не знаю)) лямбды, функциональные интерфейсы и указатели на методы (method reference).
Присваиваете функциональному интерфейсу (любому интерфейсу у которого только один абстрактный метод) лямбда выражение или methodReference c подходящей сигнатурой, другой код вызывает этот единственный метод..
Напримерно так:
java 8 (instance method)
Block<String> aFunctionalInterface = System.out::println;
Arrays.asList("А", "B", "C", "D", "E").forEach(aFunctionalInterface);
Predicate<String> p = "Строка"::equalsIgnoreCase;
System.out.println(p.test("СТРОКА"));
System.out.println(p.test("строкА"));
System.out.println(p.test("Другая строка"));
java 8 (static method)
System.out.println(
Arrays.asList("А", "Bb", "Ccc", "Ddddddddddddd", "Eeee")
.stream()
.map(s -> s.length())
.reduce(Math::max)
.get()
);