使用stream流的flatMap函数怎么避免空指针
时间: 2023-07-08 13:12:23 浏览: 626
在使用 `flatMap` 函数时,可能会出现空指针异常。为了避免这种情况,可以在调用 `flatMap` 之前先进行非空判断。例如,可以使用 `Optional` 类对流中的元素进行包装,然后使用 `flatMap` 函数时,先过滤掉空值,再进行转换操作。示例代码如下:
```
List<String> list = Arrays.asList("hello", null, "world");
List<String> result = list.stream()
.map(Optional::ofNullable)
.flatMap(Optional::stream)
.map(String::toUpperCase)
.collect(Collectors.toList());
```
在这个例子中,`map(Optional::ofNullable)` 将流中的每个元素包装成 `Optional` 对象,如果元素为 `null` 则返回一个空的 `Optional` 对象。然后,`flatMap(Optional::stream)` 过滤掉空的 `Optional` 对象,将非空的 `Optional` 对象中的值提取出来,生成一个新的流。在这个新的流中,所有的元素都是非空的,可以安全地进行转换操作。最后,使用 `collect(Collectors.toList())` 操作将流中的元素收集成一个列表。
阅读全文