Eclipse Collections随Java版本的演变

\

本文要点

\\
  • Eclipse Collections是一个高性能的Java集合框架,针对Java 8及以上版本进行了重新设计,极大地丰富了这个Java Collections框架的功能。\\t
  • 在2012年开源之前,该框架在Goldman Sachs内部已经开发了10年,那时称为GS Collections。2015年,它被迁移到Eclipse基金会。\\t
  • 它使用原始的数据结构,性能优于传统的原始集合。\\t
  • 在Eclipse Collections 8.0版本之前,EC兼容Java 5和7之间的版本。8.0及以上版本需要使用Java 8及以上版本,并且使用Optional处理潜在的null值。\\t
  • 最新版本经过升级已经支持Java 9的模块。\
\\

30秒简介——Eclipse Collections是什么?

\\

Eclipse Collections是Java Collections框架的替代者。它提供JDK兼容的List、Set和Map实现,并且提供了丰富的API以及JDK中没有的其他类型,如Bags、Multimaps和BiMaps。Eclipse Collections还充分补充了原始容器。在2012年开源之前,该框架在Goldman Sachs内部已经开发了10年,那时称为GS Collections。2015年,它被迁移到Eclipse基金会。从那会开始,所有开发都是在Eclipse Collections名下完成的。如果你想阅读一些优质的介绍性文章,可以看下Donald Raab发表在InfoQ上的文章“GS Collections实例教程”第一部分第二部分

\\

领域

\\

在讨论任何细节或代码示例之前,让我们了解下本文的代码片段来自什么领域,如下图所示:

\\

(点击查看大图)
598a0b400f1f56c7f9ed84e72232cb7f.jpg

\\

我们有一个人的列表(类型为Person),每个人对应一个Pet列表,每只宠物都是枚举类型PetType中的一种。

\\

面向Java 8的Eclipse Collections 8

\\

在Eclipse Collections 8发布之前,EC兼容的Java版本为5和7之间的版本。开发人员也可以使用Java 8,既使用框架提供的丰富API,同时又充分利用Lambda表达式和方法引用的优势,而实际效果还不错。

\\

但你能做的也就只有那些。Eclipse Collections与Java 8兼容,但它没有使用或包含Java 8。现在,从Eclipse Collections 8开始,我们已经决定兼容Java 8及以上版本,从而可以开始在我们的代码库中利用部分绝妙的Java 8新特性。

\\

Optional

\\

Optional是Java 8中最受欢迎的新特性之一。据Javadoc介绍,“一个容器对象可能包含也可能不包含非空值。如果值存在,那么isPresent()会返回true,而get()会返回那个值”。从根本上讲,Optional强制开发人员处理潜在的null项,帮助他们避免NullPointerExceptions。那么,我们可以在Eclipse Collections的那个地方使用这项特性呢?RichIterable.detectWith()非常适合。detectWith接收一个Predicate参数,返回集合中满足那个条件的第一个元素。如果它没有找到任何元素,则返回null。因而,在8.0版本中,我们引入了detectWithOptional()。该方法不会返回一个元素或null,它返回一个Optional对象,然后由用户来处理,参见下面的代码(来自我们的kata教程资料):

\\
\Person person = this.people.detectWith(Person::named, \"Mary Smith\");\//空指针异常\Assert.assertEquals(\"Mary\
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值