Java8 Stream深入学习:删除重复数据,高效聚合操作

需积分: 49 36 下载量 181 浏览量 更新于2024-08-09 收藏 807KB PDF 举报
"《Java8之Stream》学习笔记,作者汪文君,涵盖Stream的基本概念、使用方法、Fork-Join机制以及Stream的实战应用。" 在Java 8中,Stream是一个重要的新特性,它是对Collections的一个增强,专注于提供便利且高效的聚合操作。Stream不是一种数据结构,它不存储数据,而是用来处理数据。它可以支持串行和并行操作,通过Fork-Join框架实现了并行流,使得开发者无需关注并发细节就能编写出高性能的代码。 1. Stream的Hello World示例: 一个简单的例子是,从一个水果集合中筛选出苹果,并按价格降序排列,只保留价格,形成一个新的Integer列表。使用传统的集合操作方式和Stream API实现这个需求,可以明显看出Stream的简洁性。 2. Stream的获取: - 从Collections中获取:可以直接调用集合类的`stream()`或`parallelStream()`方法。 - 从Arrays中获取:使用`Arrays.stream()`方法。 - 通过静态工厂方法:如`IntStream.range()`或`Stream.of()`。 - 从Files中读取:`Files.lines()`用于读取文件的文本行。 - 自己构建:通过`Stream.builder()`创建自定义的Stream。 - 其他:如使用方法引用、构造器引用等方式生成Stream。 3. Stream的操作分类: - Intermediate操作:这些操作不会立即执行,而是返回一个新的Stream,如`filter()`, `map()`, `sorted()`。 - Terminal操作:这些操作会触发流的计算,例如`forEach()`, `collect()`, `count()`,一旦执行,流就被消费掉。 4. Stream的操作实战: - Intermediate操作通常用于过滤、映射、排序等数据转换。 - Terminal操作则用于结束流,如收集到集合、求和、查找最大值等。 5. Fork-Join机制: - Fork-Join是Java 7引入的一种并行计算框架,用于处理大任务的分解和合并。 - 原理:大任务被分解成小任务,小任务再进一步分解,直到任务足够小可以直接执行,然后通过工作窃取策略并行执行,最后将结果合并。 - 实现并行快速排序:使用ForkJoinPool和RecursiveAction实现任务的分而治之。 6. 结论: Java 8的Stream与Lambda表达式一起,带来了新的编程范式,使得函数式编程风格得以在Java中应用。虽然Java并非纯面向函数的语言,但这些新特性使得Java更加灵活,适应现代多核计算的需求。通过深入理解Stream和Fork-Join机制,开发者能编写出更高效、可读性更强的代码。