Eclipse收藏品的隐藏宝藏
Eclipse Collections是一个开放源代码Java Collections框架。 请参阅博客末尾的资源以获取有关该框架的更多信息。 在此博客中,我将演示该框架的五个鲜为人知的功能。
distinct()
:要在List
获得唯一项时,获取它们的典型方法是将List
添加到Set
。 但是,您将失去原始顺序,并最终导致哈希表的顺序无法预测。 有时,您需要保留我们访问独特元素的顺序。 我们为此用例开发了distinct()
。 当您在Eclipse CollectionsMutableList
上调用distinct()
时,结果是唯一元素List
。@Test public void distinct() {MutableList<Integer> integers = Lists.mutable.with(1, 2, 2, 3, 3, 3, 4, 4, 4, 4);Assert.assertEquals(Lists.mutable.with(1, 2, 3, 4), integers.distinct()); }
如果你不能你原来的转换
List
到Eclipse收藏列表,你可以使用ListAdapter
或ListIterate
得到相同的API。@Test public void distinctNonEclipseCollectionsList() {List<Integer> integersLinkedList = new LinkedList<>(integers);Assert.assertEquals(Lists.mutable.with(1, 2, 3, 4),ListAdapter.adapt(integersLinkedList).distinct());Assert.assertEquals(Lists.mutable.with(1, 2, 3, 4),ListIterate.distinct(integersLinkedList)); }
如果您需要
distinct()
来进行惰性评估,那么它也可以在我们的LazyIterable
中使用。@Test public void distinctAsLazy() {MutableList<String> distinctStrings = integers.asLazy().distinct().collect(String::valueOf).toList();Assert.assertEquals(Lists.mutable.with("1", "2", "3", "4"),distinctStrings); }
partition()
:当您要基于谓词在一次通过中选择和拒绝元素时,可以使用partition()
@Test public void partition() {MutableList<Integer> integers = Lists.mutable.with(1, 2, 3, 4, 5, 6, 7, 8, 9);PartitionMutableList<Integer> evenOddPartition = integers.partition(each -> each % 2 == 0);Assert.assertEquals(Lists.mutable.with(2, 4, 6, 8),evenOddPartition.getSelected());Assert.assertEquals(Lists.mutable.with(1, 3, 5, 7, 9),evenOddPartition.getRejected()); }
如果您不能使用Eclipse Collections接口,则可以始终使用我们的适配器包装您的集合,或者使用我们的静态实用程序
Iterate
获取相同的API。@Test public void partition() {List<Integer> integerList = new ArrayList<>(integers);PartitionMutableList<Integer> evenOddUsingAdapter =ListAdapter.adapt(integerList).partition(each -> each % 2 == 0);Assert.assertEquals(Lists.mutable.with(2, 4, 6, 8),evenOddUsingAdapter.getSelected());Assert.assertEquals(Lists.mutable.with(1, 3, 5, 7, 9),evenOddUsingAdapter.getRejected());PartitionIterable<Integer> evenOddUsingIterate =Iterate.partition(integerList,each -> each % 2 == 0);Assert.assertEquals(Lists.mutable.with(2, 4, 6, 8),evenOddUsingIterate.getSelected());Assert.assertEquals(Lists.mutable.with(1, 3, 5, 7, 9),evenOddUsingIterate.getRejected()); }
selectInstancesOf()
:如果要过滤并仅返回特定类的实例,则可以使用selectInstancesOf()。@Test public void selectInstancesOf() {MutableList<Number> numbers = Lists.mutable.with(1.0, 2, 3.0, 4.0, 5);MutableList<Integer> integers = numbers.selectInstancesOf(Integer.class);Assert.assertEquals(Lists.mutable.with(2, 5), integers); }
如果您不能使用Eclipse Collections接口,则可以始终使用我们的适配器包装您的集合,或者使用我们的静态实用程序
Iterate
获取相同的API。@Test public void selectInstancesOf() {List<Number> numberList = new ArrayList<>(numbers);MutableList<Integer> integersUsingAdapter = ListAdapter.adapt(numberList).selectInstancesOf(Integer.class);Assert.assertEquals(Lists.mutable.with(2, 5), integersUsingAdapter);Collection<Integer> integersUsingIterate = Iterate.selectInstancesOf(numberList, Integer.class);Assert.assertEquals(Lists.mutable.with(2, 5), integersUsingIterate); }
chunk()
:如果您想将可迭代对象分为特定大小的多个可迭代对象,则可以使用chunk()
。@Test public void chunk() {MutableList<Integer> integers = Lists.mutable.with(1, 2, 3, 4, 5);MutableList<MutableList<Integer>> expectedChunked =Lists.mutable.with(Lists.mutable.with(1, 2),Lists.mutable.with(3, 4),Lists.mutable.with(5));Assert.assertEquals(expectedChunked, integers.chunk(2)); }
如果您不能使用Eclipse Collections接口,则可以始终使用我们的适配器包装您的集合,或者使用我们的静态实用程序
Iterate
获取相同的API。@Test public void chunk() {List<Integer> integerList = new ArrayList<>(integers);RichIterable<RichIterable<Integer>> chunkUsingAdapter =ListAdapter.adapt(integerList).chunk(2);Assert.assertEquals(expectedChunked,chunkUsingAdapter);RichIterable<RichIterable<Integer>> chunkUsingIterate = Iterate.chunk(integerList, 2);Assert.assertEquals(expectedChunked,chunkUsingIterate); }
as
VSto
命名约定:在Eclipse集合,我们尽量按照就像这个所描述的共同约定博客以单词开始。在Eclipse的集合,方法“为”始终以恒定的时间,创造常数垃圾。 通常,这意味着返回包装器对象。 一些例子:asUnmodifiable()
–返回引发变异方法的集合包装器asSynchronized()
–返回在委派之前获取锁定的集合包装器asLazy()
–通过推迟对非终止操作的评估并仅在遇到终止操作时进行评估,返回支持延迟评估的包装器asReversed()
–返回列表的延迟包装器,在强制执行计算时,列表以相反的顺序进行迭代asParallel()
(Beta) –返回支持并行执行的惰性包装器
在Eclipse Collections中,以“ to”开头的方法可能会花费更多时间并产生更多垃圾。 大多数情况下,这意味着要在线性时间内创建一个新集合。 在排序集合的情况下,该值增长为O(n log n)。 一些例子:
toList()
–始终创建一个新副本,即使在列表上调用时也是如此toSet()
,toBag()
,toStack()
,toMap()
,toArray()
–时间和内存中的O(n)toSortedList()
,toSortedListBy()
,toSortedSet()
,toSortedSetBy()
,toSortedMap()
– O(n log n)时间toImmutable()
–可变集合的O(n)时间toReversed()
-同asReversed()
但将有急于评价toString()
–是的,它计数&#55357;&#56898;
摘要:
在此博客中,我解释了Eclipse集合中鲜为人知的一些功能,这些特性包括distinct(),partition(),selectInstancesOf(),chunk()以及as ()vs to ()方法命名约定。
希望您能从中找到有用的信息。 如果您以前没有使用过Eclipse Collections,请尝试一下。 下面的资源很少。 确保向我们展示您的支持并在我们的GitHub存储库上加注星号
Eclipse Collections资源:
Eclipse Collections附带了List , Set和Map的自己的实现。 它还具有其他数据结构,例如Multimap , Bag和整个Primitive Collections层次结构。 我们的每个集合都有一个丰富的API,可用于通常需要的迭代模式。
翻译自: https://www.javacodegeeks.com/2018/12/hidden-treasures-eclipse-collections.html
Eclipse收藏品的隐藏宝藏相关推荐
- Eclipse系列的隐藏宝藏– 2019年版
Eclipse Collections是一个开放源代码Java Collections框架. 在此博客中,我将演示该框架的五个鲜为人知的功能. 我在去年的Java Advent Calendar中发布 ...
- Eclipse系列的隐藏宝藏-2019年版
Eclipse Collections是一个开放源代码Java Collections框架. 在此博客中,我将演示该框架的五个鲜为人知的功能. 我在去年的Java Advent Calendar中发布 ...
- eclipse 隐藏项目_Eclipse收藏品的隐藏宝藏
eclipse 隐藏项目 Eclipse Collections是一个开放源代码Java Collections框架. 请参阅博客末尾的资源以获取有关该框架的更多信息. 在此博客中,我将演示该框架的五 ...
- eclipse使用教程_Eclipse系列的隐藏宝藏– 2019年版
eclipse使用教程 Eclipse Collections是一个开放源代码Java Collections框架. 在此博客中,我将演示该框架的五个鲜为人知的功能. 我在去年的Java Advent ...
- 群晖-隐藏宝藏之开源、免费项目管理平台Redmine
Redmine简介 免费.开源.灵活的项目管理网页应用程序,采用ruby on rails开发. 如果你正在为自己的小团队寻找免费的项目管理软件,那么redmine可能适合你,其强大且自由,能够定义几 ...
- Xcode中的隐藏宝藏:模拟器里如何快速预览动态字体显示效果
功能需求 在我们App适配动态字体后,如何快速预览不同动态字体的显示效果呢? 按照如上的操作在模拟器中会非常麻烦,那么有没有更简单的方法呢? 答案是肯定的! 从Xcode 10 开始,Apple为我们 ...
- java jax_JAX Mag的新问题:Java 13 – JDK的隐藏宝藏
java jax 让我们一起庆祝Java –三次! 又到了:新的Java版本就在这里! Java 13在Java 12发行六个月后按计划启动,并且再次具有一些有趣的功能. 在本期< Jax杂志& ...
- Teeing,java原生api的隐藏宝藏
这篇文章主要描述Collector.teeing()方法到底是什么东西 javaDocs 返回一个由两个后续的stream组成的一个新的集合,返回的新的集合中的每个元素都会经由两个处理器处理过,然后使 ...
- java btrace_BTrace:Java开发人员工具箱中的隐藏宝石
java btrace 这篇文章是关于BTrace的 ,我正在考虑将其作为Java开发人员的隐藏宝藏. BTrace是用于Java平台的安全,动态跟踪工具. BTrace可用于动态跟踪正在运行的Jav ...
最新文章
- 上不了名校?可以在 GitHub 上读他们的课程
- 2018.8.14-C++复习笔记总
- 无法绑定由多个部分组成的标识符“System.Data.DataRowView”
- NET问答:null != variable 和 variable != null 到底有什么区别?
- 2.用Python套用Excel模板,一键完成原亮样式
- 深度学习去燥学习编码_我们问了15,000个人,他们是谁,以及他们如何学习编码
- java rmi接口 超时设置_Spring RMI客户端读超时设置 | 学步园
- python并发编程4-线程
- 9:34 2009-7-28
- Asp.net三层结构原理与用意学习入门教程(五)
- 软件技术债务是什么_为什么我爱技术债务
- 【华为云技术分享】云图说 | 华为云MCP多云容器平台,让您轻松灾备!
- 测量仪图片_介绍一款电线电缆检测智能影像测量仪
- 【数据结构与算法】完结
- 昆明职高计算机学校,昆明职高学校,昆明职高学校前十强,昆明职高学校哪些比较好一点 - IT教育频道...
- Android竖虚线绘制
- 数学单位M和单位B是什么意思
- EagleEye简介:户外视频监控分析和面部识别软件
- 生成彩色二维码(渐变色、插入图片和文字)
- Swift 周报 第十七期
热门文章
- LED发光颜色及波长
- 华农兄弟、徐大Sao李子柒?谁才是B站美食区的最强王者?
- 最终幻想14无法获取服务器信息,最终幻想14无法连接到服务器 | 手游网游页游攻略大全...
- vue中使用XLSX导出多表头/单表头表格,开箱即用。
- 问道手游安卓服务器维护公告,问道手游3月9日维护公告(所有公测服务器)
- 2021.2版本idea maven修改pom关闭自动更新
- 时间飞逝,岁月无情啊
- 追踪app崩溃率、事件响应链、Run Loop、线程和进程、数据表的优化、动画库、Restful架构、SDWebImage的原理...
- [渝粤教育] 西南科技大学 公共关系学 在线考试复习资料(1)
- dir-816虚拟服务器,D-Link DIR-816 无线路由器设置 路由器