返回 | 调用 |
---|---|
<R> Stream<R> | flatMap(Function<? super T,? extends Stream<? extends R>> mapper) |
参数类型是T
返回值是Stream
且 Stream
的泛型为R
(在spark
中flatmap
的返回值是iterator
)
1.内部类实现方式,写法一:匿名内部类
这里Function
的泛型<T,R>
变成了<String,String>
重写了apply
方法,参数类型T
变成了String
,返回值类型R
也变成了String
public static void main(String[] args) throws IOException {
List<String> list1 = Arrays.asList("1","2","3");
list1.stream().flatMap(
new Function<String, Stream<? extends String>>() {
@Override
public Stream<? extends String> apply(String s) {
return Arrays.asList("a", s).stream();
}
}
).forEach(System.out::println);
}
2.内部类实现方式,写法二:内部类
public static void main(String[] args) throws IOException {
List<String> list1 = Arrays.asList("1","2","3");
list1.stream().flatMap(
new Fun()
).forEach(System.out::println);
}
static class Fun implements Function<String, Stream<? extends String>>{//实现接口时,泛型是写在接口上
@Override
public Stream<? extends String> apply(String s) {
return Arrays.asList("a", s).stream();
}
}
3.使用lambda
lambda
的本质就是Function
内部类
public static void main(String[] args) throws IOException {
List<String> list1 = Arrays.asList("1","2","3");
list1.stream().flatMap(
x -> Arrays.asList("a",x).stream()
).forEach(System.out::println);
}