为了账号安全,请及时绑定邮箱和手机立即绑定

5.Java8新特性 - Optional容器类

标签:
Java

一.Optional简介

Optional是一个容器类,代表一个值存在或者不存在,可以避免空指针异常

二.常用方法

//一个实体类public class User {
    private String name;    private int age;    private String sex;    public User(String name, int age, String sex) {        this.name = name;        this.age = age;        this.sex = sex;
    }    public User() {
    }    //......省略get/set方法、toString方法....}

作者:Mr_欢先生
链接:https://www.jianshu.com/p/c57ac950b3e0來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • of(T t):创建一个Optional实例

Optional<User> optionalUser = Optional.of(new User());
User user = optionalUser.get();
System.out.println(user);//输出:User{name='null', age=0, sex='null'}
  • empty():创建一个空的Optional实例

创建了一个空的optional,如果要打印optional.get()则出现java.util.NoSuchElementException: No value present异常

 Optional<User> optional = Optional.empty();
  • ofNullable(T t):若t不为null,创建Optional实例,否则创建空实例。(ofNullableofempty两个的功能结合体)

Optional<User> optional = Optional.ofNullable(new User());
System.out.println(optional.get());// 输出:User{name='null', age=0, sex='null'}Optional<User> optional1 = Optional.ofNullable(null);
System.out.println(optional1.get());// 出现异常信息:java.util.NoSuchElementException: No value present
  • isPresent :判断是否包含值

Optional<User> optional = Optional.ofNullable(null);if (optional.isPresent()) {
    System.out.println(optional.get());
}//第二种写法optional.ifPresent(System.out::println);//输出:不输出任何结果
  • orElse(T t):如果调用对象包含值,返回该值,否者返回t

Optional<User> optional = Optional.empty();
User user = optional.orElse(new User("小明", 12, "男"));
System.out.println(user);// 输出:User{name='小明', age=12, sex='男'}
  • orElseGet(Supplier s):如果调用对象包含值,返回该值,否则返回s获取的值

Optional<User> optional = Optional.empty();
User user = optional.orElseGet(() -> new User("小黑", 8, "男"));
System.out.println(user);//输出:User{name='小黑', age=8, sex='男'}
  • map(Function f):如果有值对其处理,并返回处理后的Optional,否则返回Optional.empty()

Optional<User> optional = Optional.of(new User("小黑", 8, "男"));
Optional<String> optionalStr = optional.map(User::getName);
System.out.println(optionalStr.get());//输出:小黑
  • flatMap(Function mapper):与map类似,要求返回值必须是Optional

Optional<User> optional = Optional.of(new User("小黑", 8, "男"));
Optional<String> optionalStr = optional.flatMap(item -> Optional.of(item.getName()));
System.out.println(optionalStr.get());//输出:小黑



作者:Mr_欢先生
链接:https://www.jianshu.com/p/5d399aae6fd9


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消