上文我们对Stream操作和无限流做了介绍,没看过的同学请出门左转 Java 8 Stream(二、Stream操作和无限流)。
文章目录
本文我们主要介绍Stream中间操作(Intermediate operations)。
一、分类
根据对元素的处理方式,中间操作可分为无状态(Stateless)操作和有状态(Stateful)操作。
无状态: 元素的处理不受之前元素的影响,例如filter()、map()、flatMap()等。
有状态: 操作只有拿到所有元素之后才能继续下去,例如distinct()、skip()、limit()等。
具体分类详见 Java 8 Stream(二、Stream操作和无限流)一、(四)操作分类
二、介绍
(一)筛选与切片
1、filter()
Stream<T> filter(Predicate<? super T> predicate);
说明: 接受一个函数式接口Predicate<T>为入参,过滤流中的数据。
示例:
Stream.of("1", "2", "3").filter(x -> x.equals("2")).forEach(System.out::println); // 2
2、distinct()
Stream<T> distinct();
说明: 通过流中元素的hashCode() 和 equals() 去重。
示例:
Stream.of("1", "3", "3").distinct().forEach(System.out::println