Java 的 Stream 是 Java 8 引入的一个新的抽象概念:
链式操作:Stream流的操作可以链式调用,形成一个操作流水线。这样可以将多个操作组合在一起,以便对集合进行复杂的处理。用于处理集合数据的流式操作。Stream 提供了一种更简洁、更具表达性的方式来操作集合,使得代码更易读、更易维护。下面是关于 Java Stream 的一些基本信息:
- Stream 的特点:
- 流是一种与集合操作密切相关的概念,它可以对集合中的元素进行各种操作,如过滤、映射、排序等。
- 流提供了一种声明式的风格,让你可以在一行代码中完成复杂的数据处理操作。
- 流操作可以进行串行(Sequential)或并行(Parallel)处理,利用多线程提高处理效率。
- Stream 的创建:
- 从集合创建流:通过集合类的stream()或parallelStream()方法,可以将集合转化为对应的流。
- 从数组创建流:使用Arrays.stream(array)方法可以将数组转化为流。
- 其他方式创建流:如通过生成器 (Stream.generate()) 创建、通过函数迭代 (Stream.iterate()) 创建等。
- Stream 的操作:
- 中间操作:中间操作是指在流上进行的转换操作,返回一个新的流以便进行连续的操作。常见的中间操作有filter()、map()、distinct()、sorted()等。
- 终端操作:终端操作是指对流进行最终的处理,产生一个结果或副作用。常见的终端操作有forEach()、collect()、reduce()、count()等。
- Stream 的惰性求值: Stream 使用了惰性求值的策略,只有在执行终端操作时才会触发中间操作的执行。这种方式可以提高效率,避免不必要的计算。
5. 并行流:Stream流支持并行处理,可以利用多核处理器的优势,在处理大数据集时提高效率。可以通过parallel()方法将串行流转换为并行流。
- 示例代码:下面是一个简单的示例代码,展示了如何使用 Stream 进行集合的处理操作:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
intsum= numbers.stream()
.filter(n -> n % 2 == 0)
.mapToInt(n -> n * 2)
.sum();
System.out.println(sum); // 输出:28
各个指令的具体解释:
- filter:用于根据指定条件筛选集合中的元素。
- map:用于对集合中的元素进行转换或提取。
- sorted:用于对集合中的元素进行排序。
- distinct:用于去除集合中的重复元素。
- limit:用于限制集合中元素的数量。
- collect:用于将流中的元素收集到一个集合中。
- forEach:用于对集合中的每个元素执行指定操作。
需要注意的是,Stream流是一次性的,即对同一个数据源的Stream流只能进行一次操作。如果需要对同一个数据源进行多次操作,需要重新创建Stream流。同时,Stream流不会改变原始集合的内容,而是生成一个新的集合或结果。