美文网首页
Java8 Optional 代码集合

Java8 Optional 代码集合

作者: AC编程 | 来源:发表于2022-09-27 18:26 被阅读0次

一、Optional.ofNullable

1.1 Demo 1
Account account = Optional.ofNullable(databaseUserRepo.findByUsername(username)).orElseThrow(() -> new UsernameNotFoundException("用户" + username + "不存在"))

1.2 Demo 2
Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build())

二、orElseGet

Optional<Wallet> findByAccountId(Integer accountId);

//为null时,创建一下新的
Wallet wallet = repository.findByAccountId(accountId).orElseGet(() -> {
           Wallet newWallet = new Wallet();
           Account account = new Account();
           account.setId(accountId);
           newWallet.setMoney(0D);
           newWallet.setAccount(account);
           repository.save(newWallet);
           return newWallet;
       });

补充:orElse方法传入的参数是明确的默认值,orElseGet方法传入的参数是获取默认值的函数。

三、map/flatMap获取关联数据

import java.util.Optional;

public class Client {
    public static void main(String[] args) {
        //测试1
        Person person = new Person();
        System.out.println(getCarInsuranceName(person));
        System.out.println(getCarInsuranceName2(person));
        System.out.println("--------------------------");

        //测试2
        Insurance insurance = new Insurance("xx保险公司");
        Car car = new Car(insurance);
        Person person2 = new Person(car);
        System.out.println(getCarInsuranceName(person2));
        System.out.println(getCarInsuranceName2(person2));
    }

    /**
     * 常规实现:根据客户信息获取车辆保险公司的名称
     *
     * @param person
     * @return
     */
    public static String getCarInsuranceName(Person person) {
        //对客户判空
        if (person == null) {
            return "Unknown";
        }
        //对车辆判空
        Car car = person.getCar();
        if (car == null) {
            return "Unknown";
        }
        //对保险公司判空
        Insurance insurance = car.getInsurance();
        if (insurance == null) {
            return "Unknown";
        }
        return insurance.getName();
    }

    /**
     * Optional实现:根据客户信息获取车辆保险公司的名称
     *
     * @param person
     * @return
     */
    public static String getCarInsuranceName2(Person person) {
        //当Optional对象为空时,则后面的map都不会继续执行
        return Optional.ofNullable(person)
                .map(Person::getCar)
                .map(Car::getInsurance)
                .map(Insurance::getName)
                .orElse("Unknown");
    }
}

相关文章

网友评论

      本文标题:Java8 Optional 代码集合

      本文链接:https://www.haomeiwen.com/subject/tyxqartx.html