[log] Java8 optional,一次操作,多次练习

https://www.jianshu.com/p/00fa8597d0c7
https://www.cnblogs.com/zhangboyu/p/7580262.html

光看不行,得动手

package com.dudu.java8.read;

import com.dudu.User;
import org.springframework.web.servlet.handler.UserRoleAuthorizationInterceptor;

import javax.swing.text.html.Option;
import java.util.Optional;

/**
 * 用optional 取代null
 *
 * @create: 20190412
 * @author: liu
 **/

public class Read10 {
    /**
     * Optional  只是对类简单封装
     * 变量不存在时,缺省的值会被建模成一个空的optional对象
     * 由empty 返回
     * <p>
     * 帮助更好的设计出合适的api,看到方法签名,就能了解它是否接收一个option的值
     *
     * @create: 2019-04-12
     * @author: liu
     **/

    public static void main(String[] args) {
        Optional<Object> empty = Optional.empty(); // 声明一个空的optional

        User user = new User();
        Optional<User> user1 = Optional.of(user);
        // 依据一个非空值创建一个optional对象
        // 如果是个null,就会立即抛出一个NullPointerException


        user.setId(123L);
        user.setUsername("liu");
        Optional<User> user2 = Optional.ofNullable(user);
        // 可以接收null的optional

        Optional<String> s = user2.map(User::getUsername);
        System.out.println(s.get());


        Optional<User> user3 = Optional.ofNullable(new User());
        Long aLong = user3.map(User::getId).orElse(111L);  // 如果为空就设置一个默认值
        System.out.println(aLong);


        // flatMap 将一个两层的optional对象合并在一起
        //   对一个空的optional进行操作不会发生任何改变,返回值也是个空的optional对象
        //   调用链上的任何一个方法返回一个空的optional,那么就过就为空


        /**
         * 默认方法
         *
         * get 如果变量存在就返回,否则抛出nosuchelementexception
         *
         * orElse  对象不包含值时,提供一个默认值
         *
         * orElseGet 是延迟调用版,Supplier方法只有optional不为空时才进行调用
         *
         * orElseThrow  optional为空时 抛出一个异常
         *
         * ifPresent  变量值存在的时候执行操作
         *
         *  @create: 2019-04-12
         *  @author: liu
         **/
        user3.get().setUsername("hua");


        // Optional<Long> id1 = Optional.of(user3.get().getId());
        // 传入的值为空时会报错

        
        Long id = Optional.ofNullable(user3.get().getId()).orElseGet(() -> user3.get().getId());
        System.out.println(id);

        user3.get().setId(222L);
        Long id2 = Optional.ofNullable(user3.get().getId()).orElseGet(() -> user3.get().getId());
        System.out.println("set : " + id2.toString());

        // id 存在就输出
        Optional.ofNullable(user3.get().getId()).ifPresent((x) -> System.out.println("ifPresent : " + x));


        //email 不存在就不执行操作
        Optional.ofNullable(user3.get().getEmail()).ifPresent((x) -> System.out.println(x));


        Optional<User> user4 = Optional.ofNullable(new User());


        // Optional.ofNullable(user4.get().getId()).orElseThrow(RuntimeException::new);
        //    没有id   就会抛出一个运行时异常,也可以是自定义的异常

        //  包含值也会返回true
        System.out.println(" isPresent : " +   Optional.ofNullable(user3.get().getId()).isPresent());


        // 对user3的id进行过滤 , 如果=222 就打印user3
        user3.filter( x -> "222".equals(user3.get().getId().toString())).ifPresent(
                x-> System.out.println(x)
        );
    }

}

动手之后,就要经常使用。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/java_sparrow/article/details/88295445
今日推荐