map和flatMap都接收一个mapping function参数。
map和flatMap返回的都是Optional类型的数据。
当mapping function返回的是Optional类型的数据时,可以直接使用flatMap,flatMap直接返回该Optional。
当mapping function返回的不是Optional类型的数据时,使用map,因为map会进行一次Optional的包装。
源码如下:
/**
* If a value is present, apply the provided mapping function to it,
* and if the result is non-null, return an {@code Optional} describing the
* result. Otherwise return an empty {@code Optional}.
*
* @apiNote This method supports post-processing on optional values, without
* the need to explicitly check for a return status. For example, the
* following code traverses a stream of file names, selects one that has
* not yet been processed, and then opens that file, returning an
* {@code Optional<FileInputStream>}:
*
* <pre>{@code
* Optional<FileInpu