Java 8引入了Stream流的概念,Stream是一个用于处理集合数据的高级抽象。它可以让我们以一种声明式的方式来处理数据,从而使代码更加简洁和可读性更高。

Stream的特点:

  1. Stream不是数据结构,它不会存储数据,而是通过管道的方式将数据进行处理。
  2. Stream操作是延迟执行的,只有在需要结果时才会执行。
  3. Stream可以是无限的,比如可以通过generate()方法生成无限的数据流。
  4. Stream可以是串行的,也可以是并行的,可以通过parallel()方法将串行流转换为并行流。

Stream的使用步骤:

  1. 创建Stream:可以通过集合、数组、I/O流等方式来创建Stream。
  2. 中间操作:对数据进行过滤、转换、排序等操作,返回一个新的Stream。
  3. 终端操作:对Stream进行聚合、计算、收集等操作,返回一个结果或者一个最终的数据结构。

常用的Stream操作:

  1. filter(Predicate predicate):过滤出满足条件的元素。
  2. map(Function<T, R> mapper):对元素进行转换。
  3. sorted(Comparator comparator):对元素进行排序。
  4. distinct():去除重复的元素。
  5. limit(long maxSize):限制元素的数量。
  6. skip(long n):跳过前n个元素。
  7. forEach(Consumer action):对每个元素执行操作。
  8. collect(Collector<T, A, R> collector):将元素收集到一个结果容器中。
  9. 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流的基本介绍和使用方法。