Bootstrap

【Java】Stream API

Stream API

【包】java.util.stream
Stream API是JDK8的新特性,实质上实现了函数式编程

一、认识一下Stream

在java中有一类,叫做集合(Collection),其功能是用于在内存存储数据。Stream这个类与集合有很亲密的关系,它是用来处理数据的。

Collection VS Stream

CollectionStream
面向内存编程面向CPU/计算编程
操作会改变存储的数据操作不会改变源数据,而是创建了新的Stream对象
操作没有区分,任何时候都可以对数据进行处理Stream一旦终止操作输出结果,便不能再进行处理

Stream相关的API分为三类

  • 创建:创建Stream流对象
  • 中间操作:对Stream中数据进行处理
  • 终止操作:对Stream结果进行“输出”
    • 输出不是指狭义的输出结果,而是指真正生成一个表示Stream结果集的操作

二、Stream的API操作

具体使用介绍参见:https://blog.csdn.net/weixin_37948888/article/details/96995312

概述

1、创建

四种方式

  • 集合对象调用默认方法stream()/parallelStream()
  • 数组工具类Arrays.stream(数组)
  • Stream的静态方法创建有限流Stream.of(多个值)
  • Stream的静态方法创建无限流Stream.generate(Math::random)

2、中间操作

1)筛选和切片——元素类型不会发生变化
  • 过滤不需要的元素filter(Predicate)
  • 只要前n个元素 limit(n)
  • 不要前n个元素skip(n)
  • 依据hashCode和equals去除重复元素distinct()
2)映射——元素的类型发生了变化
  • map(Function)
  • flatMap(Function):方面处理集合套集合的情况
3)排序
  • 自然排序,要求元素类型实现了Comparable接口sorted()
  • 定制排序sorted(Comparator)

3、终止操作

1)匹配和查找
  • 判断是否全部元素都满足断定条件allMatch(Predicate)
  • 判断是否存在元素都满足断定条件anyMatch(Predicate)
  • 判断是否全部元素都不满足断定条件noneMatch(Predicate)
  • 返回第一个元素findFirst()
  • 返回任意一个元素findAny()
  • 统计流中数据个数count()
  • 返回元素最大值max(Comparator)
  • 返回元素最小值min(Comparator)
  • 遍历每一个元素forEach(System.out::println)
2)归约——进行统计计算
  • reduce()
3)收集——将结果集转换成集合对象
  • collect()
;