(转)JDK8中Stream类和Optional类的使用
程序员文章站
2022-03-04 11:33:59
...
上一篇介绍了接口中的默认方法和静态方法,这篇记录一下Steam类和Optional类的使用,菜鸟教程上讲得还挺详细的.
1.Stream类
- Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。
- 使用Stream可以使代码简洁,美观,至于能不能提高效率,看个人习惯了.
- Stream 主要用于对集合的操作,包括迭代,过滤,排序等.
示例代码
@Test
public void testStream() {
List<String> list = new ArrayList<>();
list.add("datou");
list.add("xiaoming");
list.add("");
/*list.forEach((str) -> System.out.println(str));
list.forEach(System.out::println);*/
// 1.forEach() 方法可以迭代流中的每个数据
System.out.println("============================= forEach() start ==========================");
list.stream().forEach(System.out::println);
// 2.filter() 方法用于通过设置的条件过滤出元素
System.out.println("============================= filter() start ==========================");
list.stream().filter(str -> str.contains("da")).forEach(System.out::println);
// 3.map() 方法用于映射每个元素到对应的结果
System.out.println("============================= map() start ==========================");
list.stream().map(str -> str + " suffix").forEach(System.out::println);
// 4.limit() 方法用于获取指定数量的流
System.out.println("============================= limit() start ==========================");
list.stream().limit(2).forEach(System.out::println);
// 5.sorted() 方法用于对流进行排序
System.out.println("============================= sorted() start ==========================");
list.stream().sorted((str1, str2) -> {return str2.compareTo(str1);}).forEach(System.out::println);
}
打印结果:
============================= forEach() start ==========================
datou
xiaoming
============================= filter() start ==========================
datou
============================= map() start ==========================
datou suffix
xiaoming suffix
suffix
============================= limit() start ==========================
datou
xiaoming
============================= sorted() start ==========================
xiaoming
datou
2.Optional< T >类
- 在JDK8之前,使用引用对象时,需要先判断对象是否为 null,否则可能会报空指针异常,而有了 Optional 类之后,我们就可以不用考虑这个问题了.
- Optional 类用作T类型对象的容器, 如果该值不是null,则可以返回该对象的值; 当这个容器中的值为null时,它会执行一些预定义的操作,而不是抛出空指针异常。
示例代码
import java.util.Optional;
public class Java8Tester {
public static void main(String args[]){
Java8Tester java8Tester = new Java8Tester();
Integer value1 = null;
Integer value2 = new Integer(10);
// Optional.ofNullable - 允许传递为 null 参数
Optional<Integer> a = Optional.ofNullable(value1);
// Optional.of - 如果传递的参数是 null,抛出异常 NullPointerException
Optional<Integer> b = Optional.of(value2);
System.out.println(java8Tester.sum(a,b));
}
public Integer sum(Optional<Integer> a, Optional<Integer> b){
// Optional.isPresent - 判断值是否存在
System.out.println("第一个参数值存在: " + a.isPresent());
System.out.println("第二个参数值存在: " + b.isPresent());
// Optional.orElse - 如果值存在,返回它,否则返回默认值
Integer value1 = a.orElse(new Integer(0));
//Optional.get - 获取值,值需要存在
Integer value2 = b.get();
return value1 + value2;
}
}
参考资料
上一篇: 使用elementui的loading
下一篇: ElementUI使用
推荐阅读
-
Java日期时间API系列30-----Jdk8中java.time包中的新的日期时间API类,减少时间精度方法性能比较和使用。
-
C#中抽象类和接口的区别与使用
-
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
-
C++中模板类使用友元模板函数 和友员非模版函数!使用不当出现编译错误:无法解析的外部符号…
-
如何使用CSS3中的结构伪类选择器和伪元素选择器
-
Object类中的equals()、toString()的使用和== 和 equals() 区别
-
JDK8 Java 中遇到null 和为空的情况,使用Optional来解决。
-
实例理解Java8新特性中Stream API和Optional类的使用
-
java中Optional类下的方法使用
-
JAVA 中的Optional类理解、学习与使用