class Tmp { interface BiFunction { R apply(T t, U u); } interface Sequence { Sequence scan(R init, BiFunction func); } static void foo(Sequence sequence){} void test(Sequence strings) { foo(strings.scan(1, (i, s) -> 1)); } }