regreso | transferir |
---|---|
<R> Stream<R> |
flatMap(Function<? super T,? extends Stream<? extends R>> mapper) |
El tipo de parámetro es el T
valor de retorno Stream
y Stream
genérico como R
(en spark
el flatmap
valor de retorno iterator
)
1. El método de implementación de la clase interna, escribiendo uno: clase interna anónima El tipo genérico
aquí se Function
ha <T,R>
convertido en un método <String,String>
anulado apply
, el tipo de parámetro se ha T
convertido String
y el tipo de valor de retorno R
también se ha convertidoString
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. El método de implementación de la clase interna, la segunda forma de escribir: la clase interna
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
La esencia del uso de lambda es la Function
clase interna.
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);
}