Если мы сохранили лямбду в переменной, с типом какого-то функционального интерфейса
Supplier<String> s = () -> "hello";И сам интерфейс определен так
@FunctionalInterface
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}То мы видим, что в нем есть метод get(). Его-то и нужно использовать, чтобы заставить лямбду работать :)
System.out.println(s.get());Выведет
helloСохранить-то лямбду мы можем в переменной с самыми разными функциональными интерфейсами. Но чтобы ее использовать, придется знать, как именно называется метод в этом интерфейсе.
Это особенности "низкоуровневой" реализации функционального программирования в Java.