java8 Optional类用法解析
2016-07-12 16:48
351 查看
在Java中,null代表一个不存在的对象,如果对它进行操作就会抛出java.lang.NullPointerException异常。NPE(NullPointerException)是调试程序最常见的异常。google一下有很多关于方法到底应该返回null还是new一个空对象的讨论。
类似于scala的scala.Option[T]、Haskell的Data.Maybe,Java 8 引入了java.util.Optional<T>。Opitonal就是一个元素的容器,Java8新添加的很多类或者方法的返回值都使用了Opitonal。Java5的话可以使用Google
Guava的Optional来实现,Java8的Optional的接口跟Guava的Optional很相似。
ifPresent 方法
filter 方法
<span style="font-size:10px;">// filter
opt1.filter(x -> x.contains("ren"))
.ifPresent(System.out::println); // " Hello, rensanning! "
opt2.filter(x -> x.contains("ren"))
.ifPresent(System.out::println);
opt3.filter(x -> x.contains("ren"))
.ifPresent(System.out::println);</span>map 方法
<span style="font-size:10px;">// map
opt1.map(String::trim)
.ifPresent(System.out::println); // "Hello, rensanning!"</span>flatMap 方法
// flatMap
Optional<String> lastName = Optional.of("last");
Optional<String> firstName = Optional.of("first");
Optional<String> fullName =
lastName.flatMap(ln -> firstName.map(fn -> String.join(" ", ln, fn)));
System.out.println(fullName.get()); // "last first"get 方法
Optional<Integer> len = opt1.map(String::length);
// get
System.out.println(len.get()); // 20
try {
System.out.println(opt2.get());
} catch (Exception e) {
// java.util.NoSuchElementException
e.printStackTrace();
}orElse orElseGet orElseThrow 方法
类似于scala的scala.Option[T]、Haskell的Data.Maybe,Java 8 引入了java.util.Optional<T>。Opitonal就是一个元素的容器,Java8新添加的很多类或者方法的返回值都使用了Opitonal。Java5的话可以使用Google
Guava的Optional来实现,Java8的Optional的接口跟Guava的Optional很相似。
// 创建Optional String mayBeNull = null; Optional<String> opt1 = Optional.of(" Hello, rensanning! "); Optional<String> opt2 = Optional.ofNullable(mayBeNull); Optional<String> opt3 = Optional.empty();
ifPresent 方法
<span style="font-size:14px;">// ifPresent opt1.ifPresent(System.out::println); // " Hello, rensanning! " opt2.ifPresent(System.out::println); opt3.ifPresent(System.out::println);</span>isPresent 方法
// isPresent boolean b1 = opt1.isPresent(); boolean b2 = opt2.isPresent(); boolean b3 = opt3.isPresent(); System.out.println(b1 + "\t" + b2 + "\t" + b3); // true false false
filter 方法
<span style="font-size:10px;">// filter
opt1.filter(x -> x.contains("ren"))
.ifPresent(System.out::println); // " Hello, rensanning! "
opt2.filter(x -> x.contains("ren"))
.ifPresent(System.out::println);
opt3.filter(x -> x.contains("ren"))
.ifPresent(System.out::println);</span>map 方法
<span style="font-size:10px;">// map
opt1.map(String::trim)
.ifPresent(System.out::println); // "Hello, rensanning!"</span>flatMap 方法
// flatMap
Optional<String> lastName = Optional.of("last");
Optional<String> firstName = Optional.of("first");
Optional<String> fullName =
lastName.flatMap(ln -> firstName.map(fn -> String.join(" ", ln, fn)));
System.out.println(fullName.get()); // "last first"get 方法
Optional<Integer> len = opt1.map(String::length);
// get
System.out.println(len.get()); // 20
try {
System.out.println(opt2.get());
} catch (Exception e) {
// java.util.NoSuchElementException
e.printStackTrace();
}orElse orElseGet orElseThrow 方法
// orElse/orElseGet/orElseThrow int len1 = opt1.map(String::length).orElse(-1); int len2 = opt2.map(String::length).orElse(-1); int len3 = opt3.map(String::length).orElseGet(() -> 5*40); System.out.println(len1 + "\t" + len2 + "\t" + len3); // 20 -1 200 try { opt3.filter(s -> !s.isEmpty()) .map(s -> s.charAt(0)) .orElseThrow(IllegalArgumentException::new); } catch (Exception e) { // java.lang.IllegalArgumentException e.printStackTrace(); }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树