java lambda-如何遍历可选列表/可选流 [英] java lambda - how to traverse optional list/stream of optionals
本文介绍了java lambda-如何遍历可选列表/可选流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
具有Optional的可选列表,例如:
Having an Optional List of Optional's like:
Optional<List<Optional<String>>> optionalList = Optional.of(
Arrays.asList(
Optional.empty(),
Optional.of("ONE"),
Optional.of("TWO")));
如何遍历optionalList
以打印出字符串的ONE
和TWO
吗?
How to traverse optionalList
to print out the string's ONE
and TWO
?
拥有可选的可选流怎么样?
What about having an Optional Stream of Optionals?
Optional<Stream<Optional<String>>> optionalStream = Optional.of(
Stream.of(
Optional.empty(),
Optional.of("ONE"),
Optional.of("TWO")));
更新:感谢您的回答,为optionalStream(非嵌套)提供了解决方案:
Update: Thanks for answers, solution for optionalStream (non nested):
optionalStream
.orElseGet(Stream::empty)
.filter(Optional::isPresent)
.map(Optional::get)
.forEach(System.out::println);
推荐答案
首先,检查Optional
是否存在.如果是,则流式处理列表并过滤非空列表,然后打印每个列表.
First, check if the Optional
is present. If yes, then stream the list and filter the non-empty ones and print each of them.
optionalList.ifPresent(list -> list.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.forEach(System.out::println));
对于流情况也差不多
optionalStream.ifPresent(stream -> stream
.filter(Optional::isPresent)
.map(Optional::get)
.forEach(System.out::println));
这篇关于java lambda-如何遍历可选列表/可选流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文