Lambda FAQ_17.Java的集合要去向何方

本文分析了Java集合框架在Java8发布时的演变,重点介绍了其如何适应多核环境,通过引入Stream接口实现了更高效的函数式编程方式。文中详细解释了从传统操作到使用管道和过滤器的转变过程,以及这种方法带来的优势,如消除中间变量、减少内存消耗、提高并发处理能力等。

Java的集合要去向何方


在Java8发布时Java集合框架已经超过15岁了,虽然它发展的很好,但是随着Java语言运行环境的改变Java集合框架内在的一些假设慢慢变成了问题。最大的变化是在硬件环境,硬件设计者已经将他们的注意力从增加独立核心的时钟频率上转移到在一块芯片上增加更多的核心。为了从多核心上提升性能,应用必须能够将它们的负荷分派到不同的线程上,每个线程都在独自的核心上运行。库的设计者需要将他们的注意力转移到实现这种转变的能力上来,因为在许多Java程序中最集中的操作都是在操作集合元素,所以Java集合框架处于这种改变的中心位置。


对Java集合的使用进行分析发现有一种使用场景非常普遍,大部分操作都是从数据源(数组或者集合)中抽取数据,之后迭代集合元素进行类似过滤和映射的操作,最后在一个类似合计的操作中对元素进行合计。目前这种场景的操作需要创建一个临时的集合来存储转换操作的中间结果。然而,这种处理方式可以转换成使用众所周知的“管道和过滤”(Pipes and Filter)的管道(pipeline)方式,这种方式有很大优势:消除中间变量,减少中间存储要求,懒执行(lazy evaluation),更多的灵活性和操作定义的可组合性。甚至,如果管道中每个操作都被恰当的定义,那么管道作为一个整体可以被自动并行处理(在多核环境中可被拆分为并行处理)。Pipes角色,是作为多个管道操作的连接器,Java8的类库引入了这个概念并由Stream接口实现,查看Stram接口将会明白管道是如何工作的。


这是Java集合框架在Java8中的重要演变。这个演变使函数式编程更多的应用到集合处理中,用Stream接口中定义的方法替换当前的使用方式。


原文地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值