optional01

package com.ayan.cc.mystream;

import lombok.AllArgsConstructor;
import lombok.Data;
import org.junit.jupiter.api.Test;
import org.springframework.util.CollectionUtils;

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Optional;

/**
 * 长链调佣  防空指针
 */
public class OptionalTest {
    public static School school = new School("荆州职业技术学院",null);
    public static School schoolNull;
    public static List<School> schoolList =Collections.emptyList();

    /**存在就做某个事情*/
    @Test
    public void ifPresent() {
         Optional.ofNullable(school).ifPresent(School::showName);
         Optional.ofNullable(schoolNull).ifPresent(School::showName);
    }


    @Test
    /**对象转换 将返回结果转换为map中的对象*/
    public void map() {
        Optional<Stu> stu = Optional.ofNullable(school.getGrade()).map(Grade::getStu);
        if (stu.isPresent()) {
            stu.get().showName();
        } else {
            System.out.println("空对象");
        }
    }

    @Test
    /** orElse orElseGet  or ElseThrow  里面执行的方法需要返回School对象*/
    public void or() {
        //1.orElse 不论对象是否为空都是执行orElse里面的方法生成对象,但是不一定返回,如果ofNullable有对象那么返回的就是原对象,没有才返回新对象
        //school不为空,所以创建了新对象但是返回的是旧对象
        Optional.ofNullable(school).orElse(new School("南山大学", null)).showName();
        //schoolNull为空创建并返回新对象
        Optional.ofNullable(schoolNull).orElse(new School("南山大学", null)).showName();
        //2.orElseGet 不论对象是否为空都是执行orElse里面的方法生成对象,但是不一定返回,如果ofNullable有对象那么返回的就是原对象,没有才返回新对象
        //和orElse的区别就是,orElseGet只有school为空的时候才执行
        Optional.ofNullable(school).orElseGet(School::new);
        //3. or ElseThrow
        Optional.ofNullable(schoolNull).orElseThrow(()->new RuntimeException("wrong!"));
    }

    @Test
    public void 综合应用() {
        //拿到对象底层的学生的name
        String s = Optional.ofNullable(schoolNull).map(School::getGrade).map(Grade::getStu).map(Stu::getName).orElseGet(()->"未知");
        System.out.println(s);
    }

    @Test
    public void 测试空集合() {

      //  String s = Optional.ofNullable(schoolList).map(e->e.stream()).map(get).map(Stu::getName).orElseGet(()->"未知");

    }

    public static void main(String[] args) {
      List<String> s ;
    }

    @Data
    static
    class School {
        private String name = "敬楠第一高中";
        private Grade grade;

        School(String name, Grade grade) {
            System.out.println(name + "school对象被创建了!");
            this.name = name;
            this.grade = grade;
        }

        School() {
            System.out.println(name + " 对象被创建了!");
        }

        public void showName() {
            System.out.println(name);
        }
    }

    @Data
    class Grade {
        private String name = "三年级二班";
        private Stu stu;

        public void showName() {
            System.out.println(name);
        }
    }

    @Data
    class Stu {
        private String name = "阿三";

        public void showName() {
            System.out.println(name);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值