lambda 在集合中的 Stream 操作
Stream 操作
Stream 操作分为
中间操作
和最终操作
两种
中间操作 返回的依然是 stream 对象
最终操作 返回特定 的 计算结果
中间操作
包括但不局限于: map、 filter、 distinct、 sorted、 peek、 limit、 skip、 parallel、 unordered
- map : 一一映射 , A -> B
- filter : 过滤操作 , A(n) -> A(n - x)
- distinct : 选取不同元素[^4], A{a, b, c, a} -> A{a, b, c}
在有序流的情况下,不同元素的选择是稳定的。但是,在无序流的情况下,不同元素的选择不一定是稳定的,并且可以更改
- sorted : 排序1
- peek : 该方法主要用于支持调试,您希望在流程中流过某个特定点时查看元素
- limit : 返回 不超过 n 长度的数据 [ limit(long n)]
- skip : 丢弃前 n 个数据 [skip(long n)]
最终操作
包括但不局限于:forEach、 toArray、 min、 max、 count、 anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 iterator等
- forEach : 遍历
- toArray : 转换成列表
- min : 最小
- max: 最大
- count:数量
- anyMatch: 条件判断 相当于
||
返回 boolean - allMatch: 条件判断 相当于
&&
返回 boolean - noneMatch: 条件判断 相当于
!
返回 boolean- 例如:
Arrays.asList(1, 3, 2, 3).stream().anyMatch(e -> e==1)
- 例如:
- findFirst: 查找第一个元素
- 例如:
Optional<Integer> first = integers.stream().findFirst();
- first.get() 获取元素
Optional<T> findFirst()
- 例如:
- findAny: 查找一个元素 相对 findFirst 具有不稳定性
Optional<T> findAny()
- iterator : 迭代器
static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)
static <T> Stream<T> iterate(T seed, UnaryOperator<T> f)