Optional对象

Optional对象

Optional 类是一个可以为null的容器对象,用于简化Java中对空值的判断处理,以防止出现各种空指针异常。

静态方法-of 必须确定对象不为null 在使用of封装成optional对象 否则会报空指针异常

Optional<Author> authorOptional = Optional.of(authors);
authorOptional.ifPresent(author -> System.out.println(author.getName()));

静态方法-ofNullable 不管对象是否为null 只要使用ofNullable封装成optional对象 就会避免空指针

Optional<Author> authorOptional = Optional.ofNullable(authors);
authorOptional.ifPresent(author -> System.out.println(author.getName()));

ifPresent有参数时 执行传入的Consumer方法

Optional<Author> authorOptional = getAuthorOptional();
authorOptional.ifPresent(author -> System.out.println(author.getName()));

isPresent()判断是否是否为空 返回值为boolean类型

Optional<Author> authorOptional = getAuthorOptional();
if(authorOptional.isPresent()){
    System.out.println(authorOptional.get().getName());
}

获取值

Optional<Author> authorOptional = getAuthorOptional();

//不推荐使用get 如果使用get会对象为null会抛出异常 throw new NoSuchElementException("No value present");
Author author = authorOptional.get();

//推荐使用 如果对象不为null则展示,如果为null展示自定义的信息
Author author = authorOptional.orElseGet(() -> new Author(2L, "哈哈", 20, "一个帅气的男人", null));

//如果对象不为空则输出对象的值,如果为空则抛出我们指定的异常
Author author = authorOptional.orElseThrow(() -> new RuntimeException("没有值!!!"));

map 数据转换

ptional<Author> authorOptional = getAuthorOptional();
authorOptional.map(author -> author.getBooks())
              .ifPresent(books -> System.out.println(books));

filter方法对数据进行过滤。如果原本是有数据的,但是不符合判断,也会变成一个无数据的Optional对象。

Optional<Author> authorOptional = getAuthorOptional();
authorOptional.filter(author -> author.getAge() > 88)
              .ifPresent(author -> System.out.println(author.getName()));

 

测试使用的静态数据

private static Optional<Author> getAuthorOptional(){
    Author author = new Author(1L, "蒙多",33,"一个从菜刀中明悟哲理的祖安人" ,null);

    List<Book> books1 = new ArrayList<>();
    books1.add(new Book(1L, "刀的两侧是光明与黑暗", "哲学,爱情",88,"用一把刀划分了爱恨"));
    books1.add(new Book(2L,"一个人不能死在同一把刀下","个人成长,爱情" ,99, "讲述如何从失败中明悟真理"));
    author.setBooks(books1);

    return Optional.ofNullable(author);
}
//返回实体对象
private static Author getAuthors(){
    Author author = new Author(1L, "蒙多",33,"一个从菜刀中明悟哲理的祖安人" ,null);
    return null;
}

测试使用的类

@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class Book {

    //id
    private long id;
    //姓名
    private String name;
    //年龄
    private String category;
    //评分
    private int score;
    //简介
    private String intro;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class Author implements Comparable<Author> {

    //id
    private Long id;
    //姓名
    private String name ;
    //年龄
    private Integer age;
    //简介
    private String intro;
    //作品
    private List<Book> books ;

    //比较排序
    @Override
    public int compareTo(Author o) {
        return o.getAge() - this.getAge();
    }
}
posted @ 2022-09-10 17:35  橙香五花肉  阅读(102)  评论(0编辑  收藏  举报