使用步骤:
1. 创建Stream流
Stream流可以通过多种方式创建,主要包括以下几种:
- 通过集合(Collection):
- 使用
Collection
接口中的stream()
方法获取顺序流,如List<String> list = new ArrayList<>(); Stream<String> stream = list.stream();
- 使用
Collection
接口中的parallelStream()
方法获取并行流,如Stream<String> parallelStream = list.parallelStream();
- 使用
- 通过数组(Array):
- 使用
Arrays
类的stream(T[] array)
静态方法,如String[] array = {"a", "b", "c"}; Stream<String> stream = Arrays.stream(array);
- 使用
- 通过Stream接口的静态方法:
- 使用
Stream.of(T... values)
方法,如Stream<String> stream = Stream.of("a", "b", "c");
- 使用
Stream.iterate(T seed, UnaryOperator<T> f)
和Stream.generate(Supplier<T> s)
方法创建无限流,但通常需要通过limit()
等方法限制其长度。
- 使用
- 其他方式:
- 通过文件、网络输入流等创建Stream流,如使用
Files.lines(Path path)
方法读取文件行。
- 通过文件、网络输入流等创建Stream流,如使用
2. 中间操作链
中间操作是对Stream流进行处理的步骤,它们会返回一个新的Stream流,而不会立即执行处理。中间操作可以连接多个,形成一个操作链。常见的中间操作包括:
- filter(Predicate<? super T> predicate):过滤流中的元素。
- map(Function<? super T, ? extends R> mapper):对流中的每个元素应用给定的函数,并将其结果作为新的流中的元素。
- sorted():对流中的元素进行排序(自然排序或自定义排序)。
- limit(long maxSize):限制流中元素的数量。
- skip(long n):跳过流中的前n个元素。
- distinct():去除流中的重复元素(基于元素的
hashCode()
和equals()
方法)。
3. 终止操作
终止操作会触发前面所有中间操作的执行,并产生一个结果或副作用。终止操作之后,Stream流将不能再被使用。常见的终止操作包括:
- forEach(Consumer<? super T> action):对流中的每个元素执行给定的操作。
- collect(Collectors.toList()):将流中的元素收集到List中。
- min(Comparator<? super T> comparator)和max(Comparator<? super T> comparator):根据给定的比较器找到流中的最小或最大元素。
- count():返回流中的元素数量。
- reduce(BinaryOperator<T> accumulator):通过归约操作将流中的所有元素组合起来,得到一个值。