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

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

1. countBy() :要查找特定对象的计数时,可以使用countBy() API来获取Bag。 Bag的目的是维护对象到计数的映射。 袋可用于查询O(1)时间中的项目计数。 Bag还提供了其他有用的API,有助于计数。 在此博客中了解有关Bag数据结构的更多信息。

 @Test  public void countBy()  { MutableList<String> strings = Lists.mutable.with( "A" , "B" , "C" , "A" , "B" , "A" ); Bag<String> stringToCount = strings.countBy(each -> each); assertEquals( 3 , stringToCount.occurrencesOf( "A" )); assertEquals( 2 , stringToCount.occurrencesOf( "B" )); assertEquals( 1 , stringToCount.occurrencesOf( "C" )); assertEquals( 3 , stringToCount.sizeDistinct()); assertEquals( 6 , stringToCount.size());  } 

2. reject() :当您要选择不满足谓词的元素时,可以使用reject() API。 提供此API是为了增强可读性并使开发人员直观。 您可以使用reject()代替使用select()和取反布尔条件。 本质上,当使用reject()时,将选择所有对于布尔条件不返回true的元素。 reject(BooleanCondition)的输出与通过执行select(!someBooleanCondition)得到的输出相同。

 @Test  public void reject()  { MutableList<Integer> numbers = Lists.mutable.with( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ); MutableList<Integer> odds = numbers.reject(num -> num % 2 == 0 ); // reject pattern used to find odd numbers. // Notice there is no negation in the predicate. assertEquals(Lists.mutable.with( 1 , 3 , 5 , 7 , 9 ), odds); MutableList<Integer> oddsUsingSelect = numbers.select(num -> num % 2 != 0 ); assertEquals(odds, oddsUsingSelect);  } 

3. makeString() :当您想要RichIterable可配置字符串表示形式时,可以使用makeString() 。 如果使用不带定界符的makeString() ,则使用默认的定界符"comma space" ( ", " ) 。 如果需要特定的定界符,可以将其传递给makeString() ,输出字符串将具有字符串表示形式,其中每个元素都由定界符分隔。 如果Iterable的大小为1,则不使用定界符。

 @Test  public void makeString()  { MutableList<Integer> nums = Lists.mutable.with( 1 , 2 , 3 ); assertEquals( "[1, 2, 3]" , nums.toString()); // Notice the difference: toString() vs makeString(). // the ", " delimiter is used by default assertEquals( "1, 2, 3" , nums.makeString()); // Delimiter of choice can be passed assertEquals( "1;2;3" , nums.makeString( ";" )); MutableList<Integer> singleElement = Lists.mutable.with( 1 ); // Delimiter is not used for size = 1 assertEquals( "1" , singleElement.makeString()); assertEquals( "1" , singleElement.makeString( ";" ));  } 

4. zip() :当您要将两个OrderedIterable缝合在一起时,可以使用zip()zip() API在两个OrderedIterable上进行操作并将它们缝合在一起,这样您就获得了Pair of elements的OrderedIterable 。 在Pair ,第一Pair是从第一元件OrderedIterable和第二Pair从第二元件OrderedIterable 。 如果OrderedIterable的大小不同, OrderedIterable忽略较长OrderedIterable中多余的元素。 zip()的输出是一个OrderedIterable ,其大小与较小的OrderedIterable相同。

 @Test  public void zip()  { MutableList<Integer> nums = Lists.mutable.with( 1 , 2 , 3 ); MutableList<String> strings = Lists.mutable.with( "A" , "B" , "C" ); assertEquals( Lists.mutable.with(Tuples.pair( 1 , "A" ), Tuples.pair( 2 , "B" ), Tuples.pair( 3 , "C" )), nums.zip(strings)); assertEquals( Lists.mutable.with(Tuples.pair( "A" , 1 ), Tuples.pair( "B" , 2 ), Tuples.pair( "C" , 3 )), strings.zip(nums)); MutableList<Integer> numsSmallerSize = Lists.mutable.with( 1 ); assertEquals( Lists.mutable.with(Tuples.pair( 1 , "A" )), numsSmallerSize.zip(strings)); assertEquals( Lists.mutable.with(Tuples.pair( "A" , 1 )), strings.zip(numsSmallerSize)); MutableList<String> stringsSmallerSize = Lists.mutable.with( "A" , "B" ); assertEquals( Lists.mutable.with(Tuples.pair( 1 , "A" ), Tuples.pair( 2 , "B" )), nums.zip(stringsSmallerSize)); assertEquals( Lists.mutable.with(Tuples.pair( "A" , 1 ), Tuples.pair( "B" , 2 )), stringsSmallerSize.zip(nums));  } 

5. OrderedIterable corresponds() :当您要根据Predicate查找两个OrderedIterable的所有元素是否相等时,可以使用corresponds() API。 首先,通过检查两个OrderedIterable的大小是否相等,来检查corresponds() API,如果它们具有相同的大小,则使用传递给corresponds()Predicate来评估两个OrderedIterable的对应元素。 如果OrderedIterable s的大小相等,并且Predicate对所有元素返回true ,则corresponds() elements corresponds()返回true 。 如果OrderedIterable s的大小不相等,或者Predicate对任何元素返回false ,则corresponds()OrderedIterable corresponds()返回false

 @Test  public void corresponds()  { MutableList<Integer> lhs1 = Lists.mutable.with( 1 , 2 , 3 ); MutableList<Integer> rhs1 = Lists.mutable.with( 1 , 2 , 3 ); assertTrue(lhs1.corresponds(rhs1, Integer::equals)); MutableList<Integer> lhs2 = Lists.mutable.with( 1 , 2 , 3 ); MutableList<Integer> rhs2 = Lists.mutable.with( 2 , 4 , 6 ); assertTrue( lhs2.corresponds(rhs2, (lhs, rhs) -> rhs == 2 * lhs)); assertFalse( lhs2.corresponds(rhs2, (lhs, rhs) -> rhs == lhs * lhs)); assertFalse(lhs2.corresponds(rhs2, Integer::equals)); MutableList<Integer> lhs3 = Lists.mutable.with( 1 , 2 ); MutableList<Integer> rhs3 = Lists.mutable.with( 1 , 2 , 3 ); assertFalse(lhs3.corresponds(rhs3, Integer::equals));  } 

Eclipse Collections资源:
Eclipse Collections附带了List , Set和Map的自己的实现。 它还具有其他数据结构,例如Multimap , Bag和整个Primitive Collections层次结构。 我们的每个集合都有一个流利且丰富的API,可用于通常需要的迭代模式。

  • 网站
  • GitHub上的源代码 ( 确保对存储库 加注 星标
  • 贡献指南
  • 参考指南
  • Eclipse Collections 2018版的隐藏宝藏

翻译自: https://www.javacodegeeks.com/2019/12/hidden-treasures-of-eclipse-collections-2019-edition.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongodb一致性协议_mongo的怎么保持事物的一致性-问答-阿里云开发者社区-阿里云...

http://docs.mongoing.com/manual-zh/tutorial/perform-two-phase-commits.html要么操作全都执行&#xff0c;要么都不执行&#xff0c;不能执行一半&#xff0c;改了几条数据了&#xff0c;看哎哟好像不对&#xff0c;那扔着吧。Consistency 在数据库领域的意思跟在分布式系统…

picturectrl控件中加载图片并显示_在 CRA 中使用 webp 图片提升加载性能

webp 是 google 提倡的一种新的 image 格式&#xff0c;意在为 web 提供体积更小的图片格式。通常情况下&#xff0c;无损压缩可以减小 25%-35% 的体积&#xff08;有例外情况&#xff0c;反而会增大体积&#xff0c;但是是因为转换图片格式不兼容引起的&#xff09;&#xff0…

怎么打开网卡rss_RSS 进阶篇:Huginn - 真·为任意网页定制 RSS 源(PhantomJs 抓取)...

定制网页RSS源主要有FEED43和Huginn两种方法。FEED43&#xff1a;简单免费&#xff0c;六小时抓取一次&#xff0c;每次抓取20条静态页面。使用攻略- RSS 入门篇&#xff1a;FEED43&FeedEx-为静态网页定制 RSS 源2. Huginn&#xff1a;自由度高&#xff0c;可设定抓取频率、…

编写junit 测试_编写JUnit测试的另一种方法(Jasmine方法)

编写junit 测试最近&#xff0c;我为一个小型个人项目编写了很多Jasmine测试。 我花了一些时间才终于感到正确地完成了测试。 在此之后&#xff0c;当切换回JUnit测试时&#xff0c;我总是很难过。 由于某种原因&#xff0c;JUnit测试不再那么好&#xff0c;我想知道是否有可能…

python4 什么时候_Python4要来了?快来看看Python之父怎么说

大家好&#xff0c;我是菜鸟哥&#xff0c;今天跟大家一起聊一下Python4的话题&#xff01;从2020年的1月1号开始&#xff0c;Python官方正式的停止了对于Python2的维护。Python也正式的进入了Python3的时代。而随着时间的发展&#xff0c;关于Python4的发布也逐渐的成为了大家…

python类成员变量_Python 类变量和成员变量

Python 类变量和成员变量类与对象的方法我们已经讨论了类与对象的功能部分&#xff0c;现在我们来看一下它的数据部分。事实上&#xff0c;它们只是与类和对象的名称空间 绑定 的普通变量&#xff0c;即这些名称只在这些类与对象的前提下有效。有两种类型的 域 ——类的变量和对…

JDK 14 – JEP 361从预览中切换表达式

在我以前的文章中 &#xff0c;我写了有关作为JDK 12的预览功能发布的开关表达式和相关增强功能的信息。随后&#xff0c;在JDK 13中提出了一些更改&#xff0c;例如使用yield关键字从switch块返回值并在预览中发布。 在即将于明年3月在GA上发布的即将发布的JDK 14版本中&…

输入一个正整数求所有素数因子_一个数如果恰好等于它的因子之和,这个数就称为完数。编写应用程序求1000以内所有的完数...

运行截图&#xff1a;代码import java.util.*;public class wanshu {public static void main(String args[]) {int sum 0,i,j,k,m 0;System.out.println(" 完数有&#xff1a;");for( j 2; j < 1000 ; j){for ( i 2 ; i < j; i){if( j%i 0) //此判…

安卓禁用硬件加速_Android硬件加速详解

从Android3.0(API Level 11)开始&#xff0c;支持硬件加速&#xff0c;可充分利用GPU的特性&#xff0c;使得界面渲染更加平滑。但是硬件加速自身并非完美&#xff0c;在某些Webview版本上&#xff0c;比如Android5初期的一些rom上的Webview版本是chrome37、38版本&#xff0c;…

mac svn工具_程序员或产品经理,这些Mac的效率工具一定不要错过

工欲善其事必先利其器!用好工具能很大的提高我们的工作效率&#xff0c;尤其是程序员和产品经理等。今天给大家介绍一些好用的工具随时记下闪现的灵感人的一天中大脑会产生大约6万个想法, 其中有不少优秀的 idea. 如果我们能学会捕捉哪怕是部分灵感, 也将会收获巨大. 因此工作中…

案例 github_github 项目搜索技巧-让你更高效精准地搜索项目

作者&#xff1a;Suwanbinwww.cnblogs.com/suwanbin/p/12113751.htmlgithub 搜索技巧参考自 B站 up 主 CodeSheep 的视频【如何高效地在网上找开源项目做&#xff01;在职程序员实际演示一波视频教程操作】&#xff0c;然后写着写着一好奇就去看文档了现在这篇博客相当于官方文…

使用Spring和JSR 303进行方法参数验证

Spring提供了一种使用JSR 303 bean验证来验证方法参数的简便方法。 在这篇文章中&#xff0c;我们将看到如何使用此功能。 设定 首先&#xff0c;我们需要通过创建MethodValidationPostProcessor bean添加对方法参数验证的支持&#xff1a; Configuration public class MyCon…

想要导航提示直接进入_北斗导航已开始提供全球服务,你的手机怎样连接北斗?...

如果你是新朋友&#xff0c;请点击上方的蓝色字 关注 “高科技爱好者”&#xff0c;保证不会让你失望的.自从北斗导航全球组网成功后&#xff0c;开始向全球提供导航服务&#xff0c;关于北斗导航的话题就没有断过&#xff0c;最常听到的两个话题&#xff1a;北斗收费吗&#x…

python3异步协程爬虫_Python实现基于协程的异步爬虫

Python实现基于协程的异步爬虫一、课程介绍1. 课程来源本课程核心部分来自《500 lines or less》项目&#xff0c;作者是来自 MongoDB 的工程师 A. Jesse Jiryu Davis 与 Python 之父 Guido van Rossum。项目代码使用 MIT 协议&#xff0c;项目文档使用 http://creativecommons…

python中变量的类型是动态的随时可以变化_python动态类型简介

1、a [1,2,3]其中a是变量名&#xff0c;[1,2,3]是对象&#xff0c;a通过一个指向[1,2,3]的指针引用了对象[1,2,3].2、每一个对象都有两个标准的头部信息&#xff0c;一个是标示这个对象的类型。另外一个是用来决定是不是可以回收这个对象。3、类型属于对象&#xff0c;而不属于…

jpa和hibernate_从JPA到Hibernate的旧版和增强型标识符生成器

jpa和hibernateJPA标识符生成器 JPA定义了以下标识符策略&#xff1a; 战略 描述 汽车 持久性提供程序选择基础数据库支持的最合适的标识符策略 身份 标识符由数据库IDENTITY列分配 序列 持久性提供程序使用数据库序列来生成标识符 表 持久性提供程序使用单独的数据库…

去掉前后空格_mysql批量去掉某个字段字符中的空格

mysql有什么办法批量去掉某个字段字符中的空格&#xff1f;不仅是字符串前后的空格&#xff0c;还包含字符串中间的空格&#xff0c;答案是 replace&#xff0c;使用mysql自带的 replace 函数&#xff0c;另外还有个 trim 函数。 &#xff08;1&#xff09;mysql replace 函数 …

python自己做个定时器_技术图文:如何利用 Python 做一个简单的定时器类?

原标题&#xff1a;技术图文&#xff1a;如何利用 Python 做一个简单的定时器类&#xff1f;背景今天在B站上看有关 Python 最火的一个教学视频 -- “零基础入门学习 Python”&#xff0c;这也是我们 Python基础刻意练习活动 的推荐视频教程。python视频在学习魔法方法的时候&a…

成为Java流大师–第6部分:使用流创建新的数据库应用程序

您是否曾经想开发数据库应用程序的“快速”版本&#xff1f; 在此动手实验文章中&#xff0c;您将学习一种真正简单而直接的方法。 整个Java域模型将自动为您生成。 您只需连接到现有数据库&#xff0c;然后开始使用Java流进行开发。 例如&#xff0c;您将能够在几分钟内为您现…

快速排序 挖坑_由浅入深玩转快速排序算法

由浅入深玩转快速排序算法快速排序可以说是最快的通用排序算法&#xff0c;它甚至被誉为20世纪科学和工程领域的十大算法之一。在众多排序算法中其无论是时间复杂度还是空间复杂度都颇具优势。作为开发工程师&#xff0c;我们很有必要了解它的思想。接下来将由在下为大家一步步…