简体   繁体   English

如何在 Java 8 中执行空检查

[英]How to perform null check in java 8

How to write below code in java 8如何在java 8中编写以下代码

List<String> names = service.serviceCall();

if(names != null) { // **how to do this null check with java 8**
    names.forEach(System.out::println);
}

You can do:你可以做:

Optional.ofNullable(names).orElse(Collections.emptyList()).forEach(System.out::println);

or或者

Optional.ofNullable(names).ifPresent(n -> n.forEach(System.out::println));

or或者

Stream.of(names)
    .filter(Objects::nonNull)
    .flatMap(Collection::stream)
    .forEach(System.out::println);

but don't.但不要。 Look at all all that extra stuff you'd have to write.看看你必须写的所有额外的东西。

Just use a plain old null check, like you have in your code already.只需使用简单的旧空检查,就像您已经在代码中一样。

As the Answer by Andy Turner suggest, writing a plain null check is best here.正如安迪·特纳 (Andy Turner)答案所建议的那样,最好在这里编写一个简单的空检查。

Objects.nonNull

But Java 8 does offer one minor improvement: methods on the Objects utility class for the null check.但是 Java 8 确实提供了一个小改进:用于空检查的Objects实用程序类上的方法。

So your code would like this.所以你的代码会喜欢这个。

List<String> names = service.serviceCall();

if( Objects.nonNull( names ) ) 
{   
    names.forEach( System.out::println );
}

Objects.requireNonNullElseGet

Another method on Objects can return an alternate object if that suits your situation.在另一种方法Objects可如果适合您的情况返回替代对象。 For example, if your service call returns null list, perhaps you should substitute an empty list.例如,如果您的服务调用返回空列表,也许您应该替换一个空列表。 Call Objects.requireNonNullElseGet .调用Objects.requireNonNullElseGet

The lambda passed is handled in a lazy manner, not executed unless needed.传递的 lambda 以惰性方式处理,除非需要,否则不会执行。

List<String> names = 
        Objects.requireNonNullElseGet
        ( 
            service.serviceCall() , 
            () -> new ArrayList<>( 0 )  // In Java 9 and later, use `List.of()`.
        )
;
names.forEach( System.out::println );

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM