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<String> strings = Arrays.asList("One,Two", "Three,Four,Five"); public static Stream<String> split(String csv) { return Arrays.asList(csv.split(",")).stream(); } public void testMethodReference() { List<String> list = strings.stream() .flatMap(MethodReferenceTest::split) .collect(Collectors.toList()); } public void testLambda() { List<String> list = strings.stream() .flatMap((t) -> MethodReferenceTest.split(t)) .collect(Collectors.toList()); } public void testMethodReferenceWithCast() { List<String> list = strings.stream() .flatMap((Function<String,Stream<String>>)MethodReferenceTest::split) .collect(Collectors.toList()); } public void testAnonymousInnerClass() { List<String> strings = Arrays.asList("One,Two", "Three,Four,Five"); List<String> list = strings.stream() .flatMap(new Function<String, Stream<String>>() { @Override public Stream<String> apply(String s) { return Arrays.asList(s.split(",")).stream(); } }) .collect(Collectors.toList()); } }