流的终止操作
终止操作会从流的流水线生成结果。其结果是任何不是流的值,比如常见的List、 Integer,甚 至void等结果。对于流的终止操作,分为以下三类:

查找与匹配
- 筛选有效订单 匹配是否全部为已支付订单
// 筛选有效订单 匹配是否全部为已支付订单
System.out.println("allMatch匹配结果:" +
ordersList.stream()
.filter((order) -> order.getIsValid() == 1)
.allMatch((o) -> o.getStatus() != 0)
);
- 筛选有效订单 匹配是否存在未支付订单
// 筛选有效订单 匹配是否存在未支付订单
System.out.println("anyMatch匹配结果:" +
ordersList.stream()
.filter((order) -> order.getIsValid() == 1)
.anyMatch((o) -> o.getStatus() == 0)
);
- 筛选有效订单 全部未完成订单
// 筛选有效订单 全部未完成订单
System.out.println("noneMatch匹配结果:" +
ordersList.stream()
.filter((order) -> order.getIsValid() == 1)
.noneMatch((o) -> o.getStatus() == 5)
);
- 筛选有效订单 返回第一条订单
// 筛选有效订单 返回第一条订单
System.out.println("findAny匹配结果:"+
ordersList.stream()
.filter((order) -> order.getIsValid() == 1)
.findAny()
.get()
);
- 筛选所有有效订单 返回订单总数
// 筛选所有有效订单 返回订单总数
System.out.println("count结果:" +
ordersList.stream()
.filter((order) -> order.getIsValid() == 1)
.count()
);
- 筛选有效订单 返回金额最大订单金额
// 筛选有效订单 返回金额最大订单金额
System.out.println("订单金额最大值:" +
ordersList.stream()
.filter((order) -> order.getIsValid() == 1)
.map(Order::getTotal)
.max(Double::compare)
.get()
);
- 筛选有效订单 返回金额最小订单金额
// 筛选有效订单 返回金额最小订单金额
System.out.println("订单金额最小值:" +
ordersList.stream()
.filter((order) -> order.getIsValid() == 1)
.map(Order::getTotal)
.min(Double::compare)
.get()
);
归约&收集
1 归约
将流中元素反复结合起来,得到一个值的操作
- 计算有效订单总金额
// 计算有效订单总金额
System.out.println("有效订单总金额:" +
ordersList.stream()
.filter((order) -> order.getIsValid() == 1)
.map(Order::getTotal)
.reduce(Double::sum)
.get()
);
2 Collector数据收集
将流转换为其他形式,coollect 方法作为终端操作, 接收一个Collector接口的实现,用于给Stream中元素做汇总的方法。最常用的方法,把流中所有元素收集到一个 List, Set 或 Collection中。
3 集合收集
常用集合收集方法 toList、toSet、toCollection、toMap等
- 筛选所有有效订单 并收集订单列表
// 筛选所有有效订单并收集订单列表
ordersList.stream()
.filter((order) -> order.getIsValid() == 1)
.collect(Collectors.toList())
.forEach(System.out::println);
- 筛选所有有效订单并收集订单号与订单金额
// 筛选所有有效订单 并收集订单号 与 订单金额
Map<String,Double> map=ordersList.stream().filter((order) -> order.getIsValid() == 1).
collect(Collectors.toMap(Order::getOrderNo, Order::getTotal));
// java8 下对map进行遍历操作 如果 Map的Key重复,会报错
map.forEach((k,v)->{
System.out.println("k:"+k+":v:"+v);
});