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();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)