Optional类的方法

1、empty

private static void createNullOptional() {
// 创建一个空的Optional实例
// 方式一
Optional<Object> empty = Optional.empty();
System.out.println("empty = " + empty);
// 方式二
Optional<Object> empty2 = Optional.ofNullable(null);
System.out.println("empty2 = " + empty2);
}

2、of

 private static void of() {
Optional<String> qiuqiu = Optional.of("qiuqiu");
System.out.println("qiuqiu = " + qiuqiu); // 传入null将会报错
Optional<Object> optional = Optional.of(null);
System.out.println("optional = " + optional);
}

3、ofNullable

Optional<Object> empty2 = Optional.ofNullable(null);
System.out.println("empty2 = " + empty2);

4、filter

 private static void filter() {
// Optional<String> optional = Optional.of("hello");
Optional<String> optional = Optional.empty();
Optional<String> result = optional.filter(item -> {
if (item.contains("o")) {
return true;
}
return false;
});
// System.out.println("result = " + result.get());
System.out.println("result = " + result);
}

5、map

private static void map() {
User user = new User("qiuqiu", 22);
Optional<User> qiuqiu = Optional.of(user);
Optional<User> optional = qiuqiu.map(item -> {
String name = item.getName();
item.setName(name.toUpperCase());
return item;
});
System.out.println("optional.get() = " + optional.get());
}

6、get

private static void get() {
Optional<Integer> optional = Optional.of(520);
Integer integer = optional.get();
System.out.println("integer = " + integer);
Optional<Object> empty = Optional.empty();
// 报错 java.util.NoSuchElementException
System.out.println("empty.get() = " + empty.get());
}

7、orElse

 private static void orElse() {
Optional<Integer> optional = Optional.of(520);
Integer result = optional.orElse(1314);
System.out.println("result = " + result);
// 为空则返回默认值
Optional<Object> empty = Optional.empty();
Object orElse = empty.orElse(1314);
System.out.println("orElse = " + orElse);
}

8、orElseGet

private static void orElseGet() {
Optional<Integer> optional = Optional.of(520);
Integer result = optional.orElseGet(() -> 1214);
System.out.println("result = " + result);
// 为空则返回默认值 Supplier get()
Optional<Object> empty = Optional.empty();
Object orElseGet = empty.orElseGet(() -> 1235);
System.out.println("orElseGet = " + orElseGet);
}

9、orElseThrow

private static void orElseThrow() {
// orElseThrow() 无参
/* Optional<Integer> optional = Optional.of(520);
Integer integer = optional.orElseThrow();
System.out.println("integer = " + integer); Optional<Object> empty = Optional.empty();
Object orElseThrow = empty.orElseThrow();
System.out.println("orElseThrow = " + orElseThrow);*/ // orElseThrow() 有参
Optional<Integer> optional2 = Optional.of(520);
Integer integer2 = optional2.orElseThrow(() -> {
throw new RuntimeException("出错啦!!!");
});
System.out.println("integer2 = " + integer2); Optional<Object> empty2 = Optional.empty();
Object orElseThrow2 = empty2.orElseThrow(() -> {
throw new RuntimeException("出错啦!!!");
});
System.out.println("orElseThrow2 = " + orElseThrow2);
}

10、ifPersent

private static void ifPersent() {
Optional<Integer> optional = Optional.of(520);
// 值存在就执行Consumer
optional.ifPresent(item -> {
System.out.println("item = " + item);
});
// 值不存在就什么都不做
Optional<Object> empty = Optional.empty();
empty.ifPresent(item -> {
System.out.println("什么都不做!!!");
});
}

11、isPersent

 public static void main(String[] args) {
Optional<Integer> optional = Optional.of(520);
// 值存在就返回true
boolean isPresent = optional.isPresent();
System.out.println("isPresent = " + isPresent);
// 值不存在就返回false
Optional<Object> empty = Optional.empty();
System.out.println("empty.isPresent() = " + empty.isPresent());
}

Java8新特性Optional的更多相关文章

  1. Java8 新特性 Optional 类

    Optional 类的简介   Optional类的是来自谷歌Guava的启发,然后就加入到Java8新特性中去了.Optional类主要就是为子决解价值亿万的错误,空指针异常.   Optional ...

  2. JAVA8新特性Optional,非空判断

    Optional java 的 NPE(Null Pointer Exception)所谓的空指针异常搞的头昏脑涨, 有大佬说过 "防止 NPE,是程序员的基本修养." 但是修养归 ...

  3. Java8新特性——Optional

    前言 在开发中,我们常常需要对一个引用进行判空以防止空指针异常的出现.Java8引入了Optional类,为的就是优雅地处理判空等问题.现在也有很多类库在使用Optional封装返回值,比如Sprin ...

  4. Java8新特性--Optional

    Java 8引入了一个新的Optional类.Optional类的Javadoc描述如下: 这是一个可以为null的容器对象.如果值存在则isPresent()方法会返回true,调用get()方法会 ...

  5. java8 新特性 -Optional的常见用法

    1. Optional 一. 简介 Opitonal是java8引入的一个新类,目的是为了解决空指针异常问题.本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为 ...

  6. Java8新特性Optional、接口中的默认方法与静态方法

    Optional Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念 ...

  7. java8 新特性 Optional容器类

    public class Godness { private String name; public Godness() { } public Godness(String name) { this. ...

  8. Java8新特性——Optional类的使用(有效的避免空指针异常)

    OPtional类的使用 概述 到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因.以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guav ...

  9. Java8新特性 - Optional容器类

    Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用null 表示一个值不存在,现在Optional 可以更好的表达这个概念.并且可以避免空指针异 ...

  10. 【Java8新特性】- Optional应用

    Java8新特性 - Optional应用 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! ...

随机推荐

  1. 手写RISC-V处理器(1)

    由来 由于去年工作变动,有幸进入了芯片行业,但主要工作内容为基于RISC-V的嵌入式应用软件开发,几乎接触不到芯片设计的相关知识,然而随着工作的深入,越来越想探究一下运行在软件之下的CPU的世界,于是 ...

  2. Iphone通过ssh进行访问

    Iphone通过usb进行ssh访问文件系统 在公司里wifi很不给力,而我又想通过ssh访问我的iphone,进行一些权限访问,这时我们该 itunnel_mux_rev71这个工具可以帮我们的忙 ...

  3. 地理探测器Geodetector下载、使用、结果分析方法

      本文介绍Geodetector软件的下载方法,以及地理探测器分析的完整操作,并对其结果加以解读.   首先,我们介绍Geodetector软件的下载方法.进入软件官网,可以看到其中的第四个部分为软 ...

  4. 「codechef - STRQUER」Strange Queries

    link. 首先对原序列排序,考虑静态序列做法为:设 \(f(n,k\in\{0,1\})\) 为对于前 \(n\) 个数,第 \(n\) 个数否 / 是已经决策完毕的最优方案,转移即 \[\begi ...

  5. Unity3D 选择焦点切换

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. Vue源码学习(十三):实现watch(一):方法,对象

    好家伙,  代码出了点bug,暂时只能实现这两种形式 完整代码已开源https://github.com/Fattiger4399/analytic-vue.git Vue:watch的多种使用方法 ...

  7. k8s-服务网格实战-入门Istio

    背景 终于进入大家都比较感兴趣的服务网格系列了,在前面已经讲解了: 如何部署应用到 kubernetes 服务之间如何调用 如何通过域名访问我们的服务 如何使用 kubernetes 自带的配置 Co ...

  8. 聊聊RNN与Attention

    RNN系列: 聊聊RNN&LSTM 聊聊RNN与seq2seq attention mechanism,称为注意力机制.基于Attention机制,seq2seq可以像我们人类一样,将&quo ...

  9. centos7通过yum安装mysql5.7以上版本

    1.检查并卸载mariadb yum remove *mariadb* 遇到要求输入直接y/n 直接输入y回车 2.下载并安装mysql mysql源地址:https://repo.mysql.com ...

  10. 管道channel

    管道 go语言中管道底层是一个环形队列(先进先出),写入(send)和 取出(recv)都是从同一个位置按照同一方向顺序执行. sendx表示最后一次插入元素位置,recvx表示最后一次取出元素的位置 ...