import java.util.*; class Test { interface BiFunction { R apply(T t, U u); } interface Stream { } public void test(Stream range1, Stream range2) { zip(range1, range2, (f, s) -> asList(f, s)); zip(range1, range2, Test::asList); BiFunction asList = Test::asList; zip(range1, range2, asList); } public static List asList(T... a) { return null; } public static Stream zip(Stream a, Stream b, BiFunction zipper) { return null; } } class Test1111 { interface I { R apply(); } public void test(I i) { bar(i); } public static void bar(I i) {} }