我们如何有效地编码空检查Java8

新到Java 8风格;

我们可以通过在 Java 8 API 中包含所有空检查来为以下语句编写代码有多有效

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

我试过如下:(我觉得到处都是 Optional 有点奇怪)

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())));
                }

你能不能给我建议一个更好的方法。谢谢!

回答

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

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);
});


以上是我们如何有效地编码空检查Java8的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>