java集合的功能_功能性Java集合

java集合的功能

如今,在功能上大肆宣传,因此至少在Java集合方面,我会简要概述一下。 我个人喜欢标准
集合API,但在某些情况下可能会很尴尬并添加其他详细信息。 在Java 8+的更高版本中,这应该不是问题。 在那里,我们可能会担心不会创建回调地狱,但嘿,大多数东西没有灵丹妙药,为什么应该有一个用于编程的东西?

番石榴之路

Guava项目是Google的核心库之一,其中涵盖了许多不同的核心语言方面和问题。 有日常使用的实用程序和扩展,例如:集合,基元,缓存,通用批注,字符串处理,I / O,数学,反射等。 我们只会看一下Collections的好东西,所以让我们看看其中的一些:

// listImmutableList<String> of =ImmutableList.of("a", "b", "c", "d");// Same one for mapImmutableMap<String, String> map =ImmutableMap.of("key1", "value1", "key2", "value2");//list of intsList<Integer> theList = Ints.asList(1, 2, 3, 4, 522, 5, 6);

Guava集合与JDK集合兼容,因为它们主要扩展或实现标准类。 API中有几个很酷的实用程序,它们的名称与java.util.Collections中的名称相似。 基本上,任何了解JDK集合的程序员都应该能够轻松地转移到Guava。 用于List的那些称为Lists ,用于Set的一个称为Sets,用于Map的一个Maps ,其余的依次类推。 例如:

//create new List
List<someLongName> list = Lists.newArrayList();
//create new  LinkedHashMap
Map<someKeyType, SomeValueType> map = Maps.newLinkedHashMap();//initalize Array List on the spot
List<String> someList = Lists.newArrayList("one", "two", "three");//set inital size for readability as well as performance
List<Type> exactly100 = Lists.newArrayListWithCapacity(100);
List<Type> approx100 = Lists.newArrayListWithExpectedSize(100);

对应于特定界面的方法以非常直观的方式进行分组。 还有一些非常好的构建具有各种功能的缓存的方法:

Cache<Integer, Customer> cache = CacheBuilder.newBuilder().weakKeys().maximumSize(10000).expireAfterWrite(10, TimeUnit.MINUTES).build(new CacheLoader<Integer, Customer>() {@Overridepublic Customer load(Integer key) throws Exception {return retreveCustomerForKey(key);}});

由于Guava在大多数Maven存储库中都可用,因此很容易将其添加到构建中

兰伯达

该项目背后的想法是以一种功能性和静态类型的方式来操纵集合。 这是通过避免重复我们通常对集合执行的简单任务的方式来实现的。 重复使程序员可以复制/粘贴,并通过创建来创建bug。 在没有显式循环的情况下访问集合提供了一种过滤,排序,提取,分组,转换,调用每个项目上的方法或汇总集合中这些元素的元素或字段的方法。 除了所有这些功能之外,lambdaj还是一种DSL,因为它在语法中添加了非常酷的“糖”功能,使其在伪英语中更具可读性。 这是通过静态方法完成的,因此为了使用它们,我们直接将它们包括在内:

import static ch.lambdaj.Lambda.*;

在检查和匹配方面,lambdaj高度依赖Hamcrest匹配器。 因此,例如,创建一个奇数整数检查,然后使用该检查过滤列表:

Matcher<Integer> odd = new Predicate<Integer>() {public boolean apply(Integer item) {return item % 2 == 1;}
};
List<Integer> oddNumbers = filter(odd, asList(1, 2, 3, 4, 5));

如预期的那样,该列表将返回列表[1,3,5]。 Lambdaj在DSL方面走得更远,例如:

List<Beneficiary> beneficiaries = with(transactions).retain(having(on(Transaction.class).getQunatity(), lessThan(100))).extract(on(Transaction.class).getBeneficiary()).sort(on(Beneficiary.class).getName());

绩效成本

虽然使应用程序快速运行的最佳方法是拥有尽可能最干净的代码,但是有时您必须进行优化。为此,创建者提供了一些有关内存使用和时间的信息。 Lambdaj有一个性能Wiki页面,其中包含代码示例。 其他程序员也进行了一些测试,例如将 lambdaj与JDK8进行比较 。 也有一些有关番石榴内存使用情况的度量。 至于Guava的性能,大多数功能是标准的JDK类构建器和实用程序,因此开销很小。 归根结底,由您决定这些库中的每一个对您的项目有多大影响,以及是否有积极作用。 我的想法是,几乎每个项目的类路径上都必须包含Guava。

相关链接摘要

  • 番石榴http://code.google.com/p/guava-libraries/
  • lambdaj http://code.google.com/p/lambdaj/
  • Hamcrest http://hamcrest.org/
  • 番石榴链接http://www.tfnico.com/presentations/google-guava
  • 番石榴例子https://github.com/mitemitreski/guava-examples
  • 番石榴演示文稿http://blog.mitemitreski.com/2012/07/google-guava-for-cleaner-code.html

参考: Java Advent Calendar博客中来自JCG合作伙伴 Mite Mitresky的功能Java集合 。

翻译自: https://www.javacodegeeks.com/2012/12/functional-java-collections.html

java集合的功能

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

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

相关文章

除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效。...

原始&#xff1a; SELECT * from ( SELECT * from test order by id desc) a 解决办法&#xff1a; SELECT * from ( SELECT Top 100 Percent * from test order by id desc) a 转载于:https://www.cnblogs.com/zhaogaojian/p/10385368.html

nodejs 本地php服务器,Nodejs搭建本地http服务器

由于不做php相关的东西&#xff0c;懒得装apache&#xff0c;干脆利用nodejs搭建一个本地的服务器用于测试。nodejs这玩意儿吧&#xff0c;对做前端的介入后端简直就是一把利器。而且目前&#xff0c;nodejs也越来越有商用价值。nodejs其实是非常底层的&#xff0c;从功能上说&…

windows下如何查看磁盘IO性能

通常&#xff0c;我们很容易观察到数据库服务器的内存和CPU压力。但是对I/O压力没有直观的判断方法。磁盘有两个重要的参数&#xff1a; Seek time、 Rotational latency。正常的I/O计数为&#xff1a;①1000/(Seek timeRotational latency)*0.75&#xff0c;在此范围内属正常。…

C++ 贪吃蛇小游戏

。。 转载于:https://www.cnblogs.com/HonkerYblogs/p/10385687.html

使用Lambda,Api Gateway和CloudFormation在AWS云上使用Java

在上一篇文章中&#xff0c;我们实现了基于Java的aws lambda函数&#xff0c;并使用CloudFront进行了部署。 由于我们已经设置了lambda函数&#xff0c;因此我们将使用AWS API Gateway将其与http端点集成。 Amazon API Gateway是一项完全托管的服务&#xff0c;使开发人员可以…

oracle 索引字典,oracle数据字典、索引、序列

*************************数据字典*******************************普通的表 是用来存放 应用程序 需要的数据的student表 是存放学生信息的category 表 是存放 商品种类信息的oracle 也是一个应用程序, oracle这个系统级应用程序本身也需要存放一些数据,这些数据存到哪张表中…

从内核文件系统看文件读写过程

阅读目录 系统调用虚拟文件系统I/O 缓冲区Page CacheAddress Space文件读写基本流程 回到顶部系统调用 操作系统的主要功能是为管理硬件资源和为应用程序开发人员提供良好的环境&#xff0c;但是计算机系统的各种硬件资源是有限的&#xff0c;因此为了保证每一个进程都能安全的…

打印沙漏

7-1打印沙漏 &#xff08;20 分&#xff09; 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”&#xff0c;要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”&#xff0c;是指每行输出奇数个符号&#xff1b;各行符号中心对齐&#xff1b;相…

oracle数据库读取工具,用Oracle导入导出工具实现Oracle数据库移植

用Oracle导入导出工具实现Oracle数据库移植.很不错的方法,建议使用![more]用Oracle导入导出工具实现Oracle数据库移植Oracle数据库作为目前市场的主流数据库之一&#xff0c;许多应用都在其上进行开发&#xff0c;由于Oracle数据库更新换代的原因和不同的应用程序提供商&#x…

遥感影像语义理解

面向高分辨率遥感影像场景语义理解的概率主题模型研究&#xff1a;http://www.lmars.whu.edu.cn/index.php/xwzx/2320.html 基于自适应深度稀疏语义建模的高分辨率遥感影像场景分类&#xff1a;链接 为了挖掘高分辨率遥感场景更具区分性的语义信息&#xff0c;提出了一种将稀疏…

性能优化CPU、内存、磁盘I/O、网络性能相关命令

系统优化是一项复杂、繁琐、长期的工作&#xff0c;优化前需要监测、采集、测试、评估&#xff0c;优化后也需要测试、采集、评估、监测&#xff0c;而且是一个长期和持续的过程&#xff0c;不 是说现在优化了&#xff0c;测试了&#xff0c;以后就可以一劳永逸了&#xff0c;也…

java word批注_编写Java批注

java word批注Java 批注的允许的属性类型刻意非常严格&#xff0c;但是允许的类型也可以使用一些简洁的复合批注类型。 考虑教程站点中的示例注释&#xff1a; package annotation; interface ClassPreamble {String author();String[] reviewers(); }在这里&#xff0c;作者和…

oracle报错ora-00200,oracle 11gR2 rac 创建database报ORA-00200错误

oracle 11gR2 rac创建数据库时,报ORA-00200错误,提示权限不够NOTE: MARK has subscribedNOTE: Loaded library: SystemSUCCESS: diskgroup TESTDG was mountedErrors in file /u01/app/oracle/diag/rdbms/racdb/racdb1/trace/racdb1_ora_16324.trc:ORA-27091: unable to queue …

SLAM+语音机器人DIY系列:(二)ROS入门——2.ROS系统整体架构

摘要 ROS机器人操作系统在机器人应用领域很流行&#xff0c;依托代码开源和模块间协作等特性&#xff0c;给机器人开发者带来了很大的方便。我们的机器人“miiboo”中的大部分程序也采用ROS进行开发&#xff0c;所以本文就重点对ROS…

oracle ojvm generic,Oracle OJVM安全补丁

什么是OJVM PSU&#xff1f;CPU: Critical Patch UpdateOracle对于其产品每个季度发行一次的安全补丁包&#xff0c;通常是为了修复产品中的安全隐患。PSU: Patch Set UpdatesOracle对于其产品每个季度发行一次的补丁包&#xff0c;包含了bug的修复。Oracle选取被用户下载数量多…

小规模流处理kata。 第1部分:线程池

我再次为我的公司在GeeCON 2016上举办了编程竞赛。 这次分配需要设计并根据以下要求选择实施系统&#xff1a; 一个系统每秒传送约一千个事件。 每个Event至少具有两个属性&#xff1a; clientId –我们期望一个客户端每秒最多可以处理几个事件 UUID –全球唯一 消耗一个事…

VC++ MSDN中的 _beginthreadex与_endthreadex 的使用例子

1._beginthread, _beginthreadex .用于创建线程[cpp] view plaincopy uintptr_t _beginthread( void( *start_address )( void * ), unsigned stack_size, void *arglist ); uintptr_t _beginthreadex( //推荐使用 void *security, //安全属性&#…

「澳洋主数据项目」主数据促企业变革

part 1 企业简介&#xff1a; 澳洋集团是一家跨地区、多元化的民营企业集团&#xff0c;总部位于全国百强县市前三甲的江苏省张家港市。集团成立于1998年7月&#xff0c;2007年经国家工商总局核准&#xff0c;升格为免冠行政区划的大型集团企业。集团现有37家下属子&#xff08…

linux bin目录误删,Linux下误删 /user/bin目录后的补救

当危险的动作发生&#xff0c; 误删 /user/bin目录后的补救以下是昨天晚上真实的误操作现场&#xff0c;模拟记录一下(这是测试环境&#xff0c;所以操作得很随意&#xff0c;有些执行动作很不规范)在上面编译一个软件Dboop&#xff0c;完事以后想把它做个软链到 /usr/binsudo …

使用JFlex生成词法分析器 1:安装配置

环境&#xff1a;Windows 10 STEP 1&#xff1a; 下载 JFlex 文件&#xff0c;我选择的是 jflex-1.7.0.zip。下载完成后解压到想安装的位置。 文件结构如下&#xff08;假设解压目录为 C:\&#xff09;&#xff1a; C:\jflex-1.7.0\ --bin\ (start scri…