目录:
第一篇:初探 java8 第 01 篇( Lambda与Stream API初识 )
第二篇:深入 java8 第 02 篇( Lambda表达式基础语法 )
第三篇:深入 java8 第 03 篇( 函数式接口,常见的4个函数式接口 )
第四篇:深入 java8 第 04 篇( 方法引用与构造器引用 )
第五篇:深入 java8 第 05 篇( Stream API 的操作->创建及中间操作 )
第六篇:深入 java8 第 06 篇( Stream API 的操作->终止操作 )
第七篇:深入 java8 第 07 篇( Stream API 的操作->规约、收集 )
第八篇:深入 java8 第 08 篇( Stream API 的综合练习 )
第九篇:深入 java8 第 09 篇( Fork/Join 框架的使用及其优势 )
第十篇:深入 java8 第 10 篇( 时间新特新 -> DateTimeFormatter 解析与格式化 )
第十一篇:深入 java8 第 11 篇( 带时区的时间或日期)
第十二篇:深入 java8 第 12 篇(接口中的默认方法与静态方法 )
第十三篇:深入 java8 第 13 篇( 其他新特性 -> Optional 类/重复注解与类型注解 )
深入 java8 第 06 篇 ( Stream API 的操作->终止操作 )
一、Stream API 的操作步骤:
创建 Stream
中间操作
3. 终止操作(终端操作)
终止操作:终端操作会从流的流水线生成结果。其结果可以是任何不是流的值,例如: List、 Integer,甚至是 void 。
6.1 终止操作
allMatch(Predicate p) 检查是否匹配所有元素
anyMatch( (Predicate p) ) 检查是否至少匹配一个元素
noneMatch(Predicate p) 检查是否没有匹配所有元素
findFirst() 返回第一个元素
findAny() 返回当前流中的任意元素
count() 返回流中元素总数
max(Comparator c c) ) 返回流中最大值
min(Comparator c c) ) 返回流中最小值
forEach(Consumer c c) ) 内部迭代 ( (用 使用 Collection 接口需要用户去做迭代,称为 外部迭代 。相反, Stream API 使用内部迭代 —— 它帮你把迭代做了) )
6.1.1 准备测试数据
List<Employee> emps = Arrays.asList(
new Employee(001, "Emma", 41, 20000, Status.FREE),
new Employee(002, "Mary", 39, 18000, Status.BUSY),
new Employee(003, "Allen", 33, 15000, Status.BUSY),
new Employee(004, "Olivia", 52, 32000, Status.FREE),
new Employee(005, "Natasha", 27, 13000, Status.BUSY),
new Employee(006, "Kevin", 25, 10000, Status.FREE),
new Employee(007, "Haivent", 25, 12000, Status.FREE)
);
6.1.2 测试终止操作
@Test
public void test01(){
// 是否所有员工在繁忙中
boolean match = emps.stream()
.allMatch((e)->e.getStatus().equals(Status.BUSY));
System.out.println(match);
// 是否有员工在空闲中
boolean match2 = emps.stream()
.anyMatch((e)->e.getStatus().equals(Status.FREE));
System.out.println("\n"+match2);
// 薪资是否没有小于 15000 的员工
boolean match3 = emps.stream()
.noneMatch((e)->e.getSalary() < 15000);
System.out.println("\n"+match3);
}
@Test
public void test02(){
// 获取薪资最低的员工信息
Optional<Employee> first = emps.stream()
.sorted((x,y)->Double.compare(x.getSalary(), y.getSalary()))
.findFirst();
System.out.println(first.get());
// 获取任意一个员工信息
Optional<Employee> any = emps.parallelStream()
.filter((e)->e.getSalary()>15000)
.findAny();
System.out.println("\n"+any.get());
}
@Test
public void test03(){
// 获取所有薪资大于 15000 的员工人数
long count = emps.stream()
.filter((x)->x.getSalary() > 15000)
.count();
System.out.println(count);
// 获取员工中最高的薪资
Optional<Double> max = emps.stream()
.map(Employee::getSalary)
.max(Double::compare);
System.out.println("\n"+max.get());
// 获取薪资最低的员工信息
Optional<Employee> min = emps.stream()
.min((x,y)->Double.compare(x.getSalary(), y.getSalary()));
System.out.println("\n"+min.get());
}
Stream 流是一次性的,一旦终止操作后,则该流不能再次使用
@Test
public void test04(){
Stream<Employee> sorted = emps.stream()
.sorted((x,y)->Double.compare(x.getSalary(), x.getSalary()));
Optional<Employee> first = sorted.findFirst();
System.out.println(first.get());
boolean match = sorted.anyMatch((x)->x.getSalary() > 15000);
System.out.println("\n"+match);
}
源码下载地址:https://download.csdn.net/download/hello_world_qwp/10401249