import java.util.Arrays; import java.util.List; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; class MethodReferenceTest { private final List strings = Arrays.asList("One,Two", "Three,Four,Five"); public static Stream split(String csv) { return Arrays.asList(csv.split(",")).stream(); } public void testMethodReference() { List list = strings.stream() .flatMap(MethodReferenceTest::split) .collect(Collectors.toList()); } public void testLambda() { List list = strings.stream() .flatMap((t) -> MethodReferenceTest.split(t)) .collect(Collectors.toList()); } public void testMethodReferenceWithCast() { List list = strings.stream() .flatMap((Function>)MethodReferenceTest::split) .collect(Collectors.toList()); } public void testAnonymousInnerClass() { List strings = Arrays.asList("One,Two", "Three,Four,Five"); List list = strings.stream() .flatMap(new Function>() { @Override public Stream apply(String s) { return Arrays.asList(s.split(",")).stream(); } }) .collect(Collectors.toList()); } }