Eclipse Collections是一个开放源代码Java Collections框架。 请参阅博客末尾的资源以获取有关该框架的更多信息。 在此博客中,我将演示该框架的五个鲜为人知的功能。

  1. distinct() :要在List获得唯一项时,获取它们的典型方法是将List添加到Set 。 但是,您将失去原始顺序,并最终导致哈希表的顺序无法预测。 有时,您需要保留我们访问独特元素的顺序。 我们为此用例开发了distinct() 。 当您在Eclipse Collections MutableList上调用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收藏列表,你可以使用ListAdapterListIterate得到相同的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);
    }
  2. 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());
    }
  3. 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);
    }
  4. 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);
    }
  5. as VS to命名约定:在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收藏品的隐藏宝藏相关推荐

  1. Eclipse系列的隐藏宝藏– 2019年版

    Eclipse Collections是一个开放源代码Java Collections框架. 在此博客中,我将演示该框架的五个鲜为人知的功能. 我在去年的Java Advent Calendar中发布 ...

  2. Eclipse系列的隐藏宝藏-2019年版

    Eclipse Collections是一个开放源代码Java Collections框架. 在此博客中,我将演示该框架的五个鲜为人知的功能. 我在去年的Java Advent Calendar中发布 ...

  3. eclipse 隐藏项目_Eclipse收藏品的隐藏宝藏

    eclipse 隐藏项目 Eclipse Collections是一个开放源代码Java Collections框架. 请参阅博客末尾的资源以获取有关该框架的更多信息. 在此博客中,我将演示该框架的五 ...

  4. eclipse使用教程_Eclipse系列的隐藏宝藏– 2019年版

    eclipse使用教程 Eclipse Collections是一个开放源代码Java Collections框架. 在此博客中,我将演示该框架的五个鲜为人知的功能. 我在去年的Java Advent ...

  5. 群晖-隐藏宝藏之开源、免费项目管理平台Redmine

    Redmine简介 免费.开源.灵活的项目管理网页应用程序,采用ruby on rails开发. 如果你正在为自己的小团队寻找免费的项目管理软件,那么redmine可能适合你,其强大且自由,能够定义几 ...

  6. Xcode中的隐藏宝藏:模拟器里如何快速预览动态字体显示效果

    功能需求 在我们App适配动态字体后,如何快速预览不同动态字体的显示效果呢? 按照如上的操作在模拟器中会非常麻烦,那么有没有更简单的方法呢? 答案是肯定的! 从Xcode 10 开始,Apple为我们 ...

  7. java jax_JAX Mag的新问题:Java 13 – JDK的隐藏宝藏

    java jax 让我们一起庆祝Java –三次! 又到了:新的Java版本就在这里! Java 13在Java 12发行六个月后按计划启动,并且再次具有一些有趣的功能. 在本期< Jax杂志& ...

  8. Teeing,java原生api的隐藏宝藏

    这篇文章主要描述Collector.teeing()方法到底是什么东西 javaDocs 返回一个由两个后续的stream组成的一个新的集合,返回的新的集合中的每个元素都会经由两个处理器处理过,然后使 ...

  9. java btrace_BTrace:Java开发人员工具箱中的隐藏宝石

    java btrace 这篇文章是关于BTrace的 ,我正在考虑将其作为Java开发人员的隐藏宝藏. BTrace是用于Java平台的安全,动态跟踪工具. BTrace可用于动态跟踪正在运行的Jav ...

最新文章

  1. 上不了名校?可以在 GitHub 上读他们的课程
  2. 2018.8.14-C++复习笔记总
  3. 无法绑定由多个部分组成的标识符“System.Data.DataRowView”
  4. NET问答:null != variable 和 variable != null 到底有什么区别?
  5. 2.用Python套用Excel模板,一键完成原亮样式
  6. 深度学习去燥学习编码_我们问了15,000个人,他们是谁,以及他们如何学习编码
  7. java rmi接口 超时设置_Spring RMI客户端读超时设置 | 学步园
  8. python并发编程4-线程
  9. 9:34 2009-7-28
  10. Asp.net三层结构原理与用意学习入门教程(五)
  11. 软件技术债务是什么_为什么我爱技术债务
  12. 【华为云技术分享】云图说 | 华为云MCP多云容器平台,让您轻松灾备!
  13. 测量仪图片_介绍一款电线电缆检测智能影像测量仪
  14. 【数据结构与算法】完结
  15. 昆明职高计算机学校,昆明职高学校,昆明职高学校前十强,昆明职高学校哪些比较好一点 - IT教育频道...
  16. Android竖虚线绘制
  17. 数学单位M和单位B是什么意思
  18. EagleEye简介:户外视频监控分析和面部识别软件
  19. 生成彩色二维码(渐变色、插入图片和文字)
  20. Swift 周报 第十七期

热门文章

  1. LED发光颜色及波长
  2. 华农兄弟、徐大Sao李子柒?谁才是B站美食区的最强王者?
  3. 最终幻想14无法获取服务器信息,最终幻想14无法连接到服务器 | 手游网游页游攻略大全...
  4. vue中使用XLSX导出多表头/单表头表格,开箱即用。
  5. 问道手游安卓服务器维护公告,问道手游3月9日维护公告(所有公测服务器)
  6. 2021.2版本idea maven修改pom关闭自动更新
  7. 时间飞逝,岁月无情啊
  8. 追踪app崩溃率、事件响应链、Run Loop、线程和进程、数据表的优化、动画库、Restful架构、SDWebImage的原理...
  9. [渝粤教育] 西南科技大学 公共关系学 在线考试复习资料(1)
  10. dir-816虚拟服务器,D-Link DIR-816 无线路由器设置 路由器