import java.util.List; class Test { void a(List range1, List range2) { zip(range1, range2, Test::asList); I1 i = Test :: asList; } public static List zip(List a, List b, BiFunction zipper) { return null; } public interface BiFunction { R apply(T t, U u); } public static List asList(T... a) { return null; } interface I1 { List a(T... t); } }