Optional 实例

1.of

为非 null 的值创建一个 Optional。of 方法通过工厂方法创建 Optional 类。需要注意的是,创建对象时传入的参数不能为 null。如果传入参数为 null,则抛出 NullPointerException 。

Optional<String> optional = Optional.of("xiaoming");
//传入null,抛出NullPointerException
Optional<Object> o = Optional.of(null);

2.ofNullable

为指定的值创建一个 Optional,如果指定的值为 null,则返回一个空的 Optional。

Optional<Object> o1 = Optional.ofNullable(null);

3.isPresent

值存在返回 true,否则返回 false

Optional<String> optiona2 = Optional.of("xiaoming");
System.out.println(optiona2.isPresent());

4.get

Optional 有值就返回,没有抛出 NoSuchElementException

Optional<Object> o1 = Optional.ofNullable(null);
System.out.println(o1.get());

5.ifPresent

如果 Optional 有值则调用 consumer 处理,否则不处理

Optional<Object> o1 = Optional.ofNullable(null);
 o1.ifPresent(s -> System.out.println(s));

6.orElse

如果有值则将其返回,否则返回指定的其它值

Optional<Object> o1 = Optional.ofNullable(null);
System.out.println(o1.orElse("输出orElse")); // 输出orElse

7.orElseGet

orElseGet 与 orElse 方法类似,区别在于得到的默认值。orElse 方法将传入的字符串作为默认值,orElseGet 方法可以接受 Supplier 接口的实现用来生成默认值

Optional<Object> o1 = Optional.ofNullable(null);
System.out.println(o1.orElseGet(() -> "default value")); // default value

8.orElseThrow

如果有值则将其返回,否则抛出 supplier 接口创建的异常。

Optional<Object> o1 = Optional.ofNullable(null);
try {
  o1.orElseThrow(() -> new Exception("异常!"));
} catch (Exception e) {
  System.out.println("info:" + e.getMessage());
}//输出:info:异常!

9.map

如果有值,则对其执行调用 mapping 函数得到返回值。如果返回值不为 null,则创建包含 mapping 返回值的 Optional 作为 map 方法返回值,否则返回空 Optional。

Optional<String> optional = Optional.of("xiaoming");
String s = optional.map(e -> e.toUpperCase()).orElse("shiyilingfeng");
System.out.println(s); //输出: XIAOMING

10.flatMap

如果有值,为其执行 mapping 函数返回 Optional 类型返回值,否则返回空 Optional。与 map 不同的是,flatMap 的返回值必须是 Optional,而 map 的返回值可以是任意的类型 T

Optional<String> optional = Optional.of("xiaoming");
Optional<String> s = optional.flatMap(e -> Optional.of(e.toUpperCase()));
System.out.println(s.get()); //输出:XIAOMING

11.filter

List<String> strings = Arrays.asList("rmb", "doller", "ou");
for (String s : strings) {
  Optional<String> o = Optional.of(s).filter(s1 -> !s1.contains("o"));
  System.out.println(o.orElse("没有不包含o的"));
}//输出:
rmb
没有不包含o的
没有不包含o的
 

 

 
 
 
 
 
posted @   KLAPT  阅读(46)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
历史上的今天:
2021-04-06 MySQL 事务的实现原理
2021-04-06 后端优化
2021-04-06 MyBatis 动态 SQL
2021-04-06 注入
点击右上角即可分享
微信分享提示