什么是Stream流?
jdk1.8
中引入的Stream流是一种用函数式编程方式
操作集合的新特性,提供了一种更简洁、高效的方式来处理集合数据,可以将集合操作转换为一系列的流水线操作,实现更加优雅和功能强大的数据处理。
主要特点和优势:
链式调用
,可以将多个操作连接在一起,形成一个流水线式的数据处理过程,使代码更加清晰和易读。Lambda表达式
来定义操作,从而简化代码,减少样板代码的编写。Stream流的简单Demo:
import java.util.Arrays;
import java.util.List;
public class StreamDemo {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 使用Stream流对集合元素进行处理
int sum = numbers.stream()
.filter(n -> n % 2 == 0) // 过滤偶数 2 4
.map(n -> n * 2) // 将偶数翻倍 4 8
.reduce(0, Integer::sum); // 求和 4 + 8 = 12
System.out.println("处理后的结果:" + sum); // 处理后的结果:12
}
}
使用水果的Demo来解释API:
import java.util.Arrays;
import java.util.List;
public class StreamFruitsDemo {
public static void main(String[] args) {
List<String> fruits = Arrays.asList("Apple", "Banana", "Cherry", "Date", "Elderberry");
// `过滤` 长度大于5的水果
System.out.println("过滤后的水果:");
fruits.stream()
.filter(fruit -> fruit.length() > 5)
.forEach(System.out::println); // 循环输出,打印过滤的结果
// 将水果名称 `转换为大写`
System.out.println("映射后的水果名称:");
fruits.stream()
.map(String::toUpperCase)
.forEach(System.out::println);
// 对水果名称进行 `排序`
System.out.println("按字母顺序排序的水果名称:");
fruits.stream()
.sorted()
.forEach(System.out::println);
// 对水果名称进行 `连接`
System.out.println("所有水果名称连接后的结果:" );
fruits.stream()
.reduce("", (partialResult, fruit) -> partialResult + " " + fruit);
}
}
ps:其它API可以查询官网等方式来了解,这篇文章就不过多描述其用法了。
Stream 接口:
Stream
接口是 jdk1.8
引入的用于支持函数式编程的接口,它提供了一种高效处理集合数据的方式。Stream
接口并不是存储数据的容器,而是用于描述对数据的一系列操作,并且可以进行链式操作。
Spliterator 接口:
Spliterator
接口是jdk1.8
中引入的,用于支持并行遍历和分割迭代元素的接口。在 Stream 流中,Spliterator
主要用于将数据分割成多个部分,以便并行处理。
Stream接口和 Spliterator接口的Demo:
要查看流的创建方式的实现逻辑,可以从不同的创建方式入手。
建议按照以下顺序来查看源码:
Collection
接口的 stream()
方法入手,查看其实现逻辑。可以查看 java.util.Collection
接口的源码,找到 stream()
方法的具体实现。java.util.Arrays
类中的 stream()
方法的实现逻辑,找到数组创建流的具体过程。Stream.of()
,可以直接查看 java.util.stream.Stream
类中的实现逻辑,找到对应的静态方法实现。parallelStream()
方法创建并发流,默认使用的是 ForkJoinPool.commonPool()
线程池。创建方式:
ps:本文章从 Collection
接口的 stream()
方法入手来解读源码,其它源码读者可以试着去解读。
源码解析都是写在图上,不做过多的描述。
到了Stream接口,懂的都懂了吧,中间操作和终端操作等解析,请期待下篇文章哈哈哈哈哈,晚安玛卡巴卡+__+
你只管努力,剩下的交给时间