列表上的Optional.ofNullable()

问题描述 投票:0回答:2

我需要有关 java 8+ 可选概念之一的帮助。我一直看到开发人员在列表对象上使用Optional.ofNullable,这是不正确的,我不确定它如何在没有错误/缺陷的情况下完美工作。代码是这样的

注意:列表对象是通过从存储库层进行数据库调用来捕获的。

Optional.ofNullable(list) .orElse(Collections.emptyList()) .stream().forEach(x-> { ------ ------};);

List 不能为 null,如果没有元素则为空([]),那么它如何正确处理Optional.ofNullable()呢?我尝试通过在 forEach 中添加打印语句来测试虚拟代码,它会在两种情况下打印(列表为空以及不为空)。

java list option-type nullable
2个回答
5
投票

如果列表为空(这可能取决于用例),它会创建一个空列表并打印其内容,该内容将为空(但不会抛出异常)。如果不为空,则会打印其内容。

List<String> list = null;
 // prints empty list
 Optional.ofNullable(list).orElse(Collections.emptyList()).stream()
         .forEach(System.out::println);
 list = List.of("A", "B", "C");
 // print the contents.
 Optional.ofNullable(list).orElse(Collections.emptyList()).stream()
         .forEach(System.out::println);

打印

A
B
C

我认为这个想法是通过处理空集合来处理空列表。


0
投票

如果你真的想在这里使用Optional,你可以做一些更简单的事情,就像这样:

Optional.ofNullable(list).ifPresnt(l -> l.forEach(....))

但是,在我看来,一个简单的空检查就可以了:

if(list != null) {
    list.forEach(x -> {...})
}
© www.soinside.com 2019 - 2024. All rights reserved.