Java 8引入了Stream流的概念,Stream是一个用于处理集合数据的高级抽象。它可以让我们以一种声明式的方式来处理数据,从而使代码更加简洁和可读性更高。
Stream的特点:
- Stream不是数据结构,它不会存储数据,而是通过管道的方式将数据进行处理。
- Stream操作是延迟执行的,只有在需要结果时才会执行。
- Stream可以是无限的,比如可以通过generate()方法生成无限的数据流。
- Stream可以是串行的,也可以是并行的,可以通过parallel()方法将串行流转换为并行流。
Stream的使用步骤:
- 创建Stream:可以通过集合、数组、I/O流等方式来创建Stream。
- 中间操作:对数据进行过滤、转换、排序等操作,返回一个新的Stream。
- 终端操作:对Stream进行聚合、计算、收集等操作,返回一个结果或者一个最终的数据结构。
常用的Stream操作:
- filter(Predicate predicate):过滤出满足条件的元素。
- map(Function<T, R> mapper):对元素进行转换。
- sorted(Comparator comparator):对元素进行排序。
- distinct():去除重复的元素。
- limit(long maxSize):限制元素的数量。
- skip(long n):跳过前n个元素。
- forEach(Consumer action):对每个元素执行操作。
- collect(Collector<T, A, R> collector):将元素收集到一个结果容器中。
- reduce(T identity, BinaryOperator accumulator):将元素进行聚合操作。
示例代码:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 使用Stream过滤出大于2的元素并打印
numbers.stream()
.filter(n -> n > 2)
.forEach(System.out::println);
// 使用Stream对元素进行平方并打印
numbers.stream()
.map(n -> n * n)
.forEach(System.out::println);
// 使用Stream对元素进行排序并打印
numbers.stream()
.sorted()
.forEach(System.out::println);
// 使用Stream去除重复的元素并打印
numbers.stream()
.distinct()
.forEach(System.out::println);
// 使用Stream对元素进行聚合操作并打印
int sum = numbers.stream()
.reduce(0, (a, b) -> a + b);
System.out.println(sum);
以上是Java 8 Stream流的基本介绍和使用方法。