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();
}
}
Optional对象的更多相关文章
- Guava API学习之Optional 判断对象是否为null
java.lang.NullPointerException,只要敢自称Java程序员,那对这个异常就再熟悉不过了.为了防止抛出这个异常,我们经常会写出这样的代码: Person person = p ...
- Guava学习笔记(1):Optional优雅的使用null
转自:http://www.cnblogs.com/peida/archive/2013/06/14/Guava_Optional.html 参考:[Google Guava] 1.1-使用和避免nu ...
- JAVA 8 Optional类介绍及其源码
什么是Optional对象 Java 8中所谓的Optional对象,即一个容器对象,该对象可以包含一个null或非null值.如果该值不为null,则调用isPresent()方法将返回true,且 ...
- guava学习--Optional可空类型
转载:http://www.cnblogs.com/whitewolf/p/4231783.html Null sucks 回到本文主题Optional.在我日常编程中NullPointerExcep ...
- Optional优雅的使用null
在我们学习和使用Guava的Optional之前,我们需要来了解一下Java中null.因为,只有我们深入的了解了null的相关知识,我们才能更加深入体会领悟到Guava的Optional设计和使用上 ...
- C++ 中关于optional 使用过程中遇到的问题
头文件:#include <boost/optional.hpp> using namespace boost; optional很像一个仅能存放一个元素的容器,它实现了"未初始 ...
- Java 8——Optional
本文主要介绍Java 8的 Optional 的简单使用 Address 1 2 3 4 5 6 7 @Data @AllArgsConstructor @NoArgsConstructor publ ...
- Java中Optional使用注意事项
前言 之前遇到过使用Optional之后带来的隐含bug,现在强调记录一下不好的用法,防止错用. Optional不能序列化,不能作为类的字段(field) 这点尤为重要,即类要纯粹.如果是POJO就 ...
- Java 中遇到null 和为空的情况,使用Optional来解决。
Java 中遇到null 和为空的情况,使用Optional来解决 示例代码: package crazy; import java.util.Optional; class Company { pr ...
- map和flatmap的区别+理解、学习与使用 Java 中的 Optional
转自:map和flatmap的区别 对于stream, 两者的输入都是stream的每一个元素,map的输出对应一个元素,必然是一个元素(null也是要返回),flatmap是0或者多个元素(为n ...
随机推荐
- 解决报错:axios is not defined
好家伙,来解决报错:axios is not defined 写前端嘛,修bug,不寒颤 进入页面一片空白 来看看报错: 1.axios在安装时:npm install axios --save-de ...
- KingbaseES 数据库删除功能组件
关键字: KingbaseES.卸载.删除功能 一.安装后检查 在安装完成后,可以通过以下几种方式进行安装正确性验证: 1. 查看安装日志,确认没有错误记录; 2. 查看开始菜单: 查看应用程 ...
- 1.关于433MHz按键单片机解码
近段时间做项目要用到单片机接收433MHz按键发过来的码值,涉及短按.连按.长按,由于之前没有做过这方面一开始有点蒙,找遍网上都没有案例,现在项目完成了整理自己的一些心得和大家分享分享!!!直入主题. ...
- winform,隐藏窗体
public Form1() { InitializeComponent(); this.WindowState = FormWindowSt ...
- (数据科学学习手札143)为geopandas添加gdb文件写出功能
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,很多读者朋友跟随着我先前写作的 ...
- 在图片不被裁剪时opencv绕图片中任意点旋转任意角度
opencv绕图片中任意角度旋转任意角度 最近在做项目需要把把图片绕图片中任意点旋转任意角度,考虑到自己旋转需要编写插值算法,所以想到了用opencv,但是网上都是围绕图片中点旋转任意角度的,都是 ...
- day43-反射02
2.Class类 2.1基本介绍 Class类也是类,因此也继承Object类 Class类对象不是new出来的,而是系统创建的 对于某个类的Class类对象,在内存中只有一份,因为类只加载一次 每个 ...
- 如何使用netlify部署vue应用程序
什么是Netlify? Netlify是一个现代网站自动化系统,其JAM架构代表了现代网站的发展趋势.所谓JAM,就是指基于客户端JavaScript.可重用API和预构建Markup标记语言的三者结 ...
- POJ3237 Tree (树链剖分)
通过打懒标记实现区间取反,和线段树基本操作都差不多. 本题还是一道边权化为点权的问题. 200行巨长代码: 1 #include<cstdio> 2 #include<cstring ...
- 设计模式之观察者模式_C++
1 // ADBHelper.cpp : This file contains the 'main' function. Program execution begins and ends there ...