我们对空代码的有效性检查Java 8



LittleJava 8风格的新增

如何有效地,我们可以通过在Java 8 API 中包含所有空检查来为以下语句编码

search.getResource()
.getResults().get(0).getCustomer().getPhoneNumber()

我试着如下:(到处都是可选的,对我来说有点奇怪(

List<Result> results = search.getResource().getResults();
Optional<Result> optionalResult =  Optional.of(results).orElse(new ArrayList<>()).stream().findFirst();
if(optionalResult.isPresent() && Optional.of(optionalResult.get().getCustomer()).isPresent()) {
Source source = Optional.of(optionalResult.get().getCustomer()).get();
Optional<List<Customer>> customers = Optional.of(source.getCustomers());
if(customers.isPresent() && customers.get().stream().findFirst().isPresent() &&
Optional.of(customers.get().stream().findFirst().get().getPhoneNumber()).isPresent())
dest.setNumber(Integer.parseInt(customers.get().stream().findFirst().get().getPhoneNumber())));
}

你能给我一个更好的方法吗。谢谢

您可以使用Optional类的map方法:

final Optional<String> optional = Optional.ofNullable(search.getResource())
.map(resource -> resource.getResults())
.map(results -> results.size() > 0 ? results.get(0) : null)
.map(result -> result.getCustomer())
.map(customer -> customer.getPhoneNumber());
optional.ifPresent(phoneNumber -> {
System.out.println(phoneNumber);
});

OT:为什么不简单地对空安全进行编码?

编码null safe意味着您永远不会从方法显式返回(文字(null或将其作为参数传入。此外,您总是在传递或返回局部变量之前对其进行null检查
Map集合上,使用getOrDefaultcomputeIfAbsent将为缺少键返回的null替换为所需类型的Null等效常量

通常,来回传递null是错误条件的带内信号,Java对此有异常

不:绕过Optional不是一个解决方案,而是问题的另一个体现。Optional是处理变量的一种优雅方式,而不是在方法中包含null
不要让它逃脱。。。

最新更新