我需要有关 java 8+ 可选概念之一的帮助。我一直看到开发人员在列表对象上使用Optional.ofNullable,这是不正确的,我不确定它如何在没有错误/缺陷的情况下完美工作。代码是这样的
注意:列表对象是通过从存储库层进行数据库调用来捕获的。
Optional.ofNullable(list) .orElse(Collections.emptyList()) .stream().forEach(x-> { ------ ------};);
List 不能为 null,如果没有元素则为空([]),那么它如何正确处理Optional.ofNullable()呢?我尝试通过在 forEach 中添加打印语句来测试虚拟代码,它会在两种情况下打印(列表为空以及不为空)。
如果列表为空(这可能取决于用例),它会创建一个空列表并打印其内容,该内容将为空(但不会抛出异常)。如果不为空,则会打印其内容。
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
我认为这个想法是通过处理空集合来处理空列表。
如果你真的想在这里使用Optional,你可以做一些更简单的事情,就像这样:
Optional.ofNullable(list).ifPresnt(l -> l.forEach(....))
但是,在我看来,一个简单的空检查就可以了:
if(list != null) {
list.forEach(x -> {...})
}