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集合的功能

java集合的功能_功能性Java集合相关推荐

  1. JAVA 实现FTP功能_在Java程序中实现FTP功能

    本文来演示在JAVA编程中实现FTP功能的三个重要部分内容的源程序: FtpList部分是用来显示FTP上的文件; GetButton部分为从FTP下传一个文件; PutButton部分为向FTP服务 ...

  2. java mysql点赞功能_用Java做一个类似于微博QQ空间点赞的功能-Fun言

    点赞是一个互动性很强的功能,网站加入点赞可以增强用户之间的亲密度,可以利用点赞排出受欢迎文章或者其他的列表,所以今天教大家如何做一个类似于微博.QQ空间的点赞功能 需求分析: 首先要明确这个功能是需要 ...

  3. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  4. java 1.6 最大化_关于java:JDK 1.6和1.7中的新功能

    我很了解JDK 1.5.众所周知,除了新的API(例如AtomicInteger),还有一些主要的语言更改,例如提供对泛型的支持.添加枚举.私有化自动装箱和自动取消装箱等. 我想找到一些资源,它们最好 ...

  5. java全文检索功能_基于Java的全文检索引擎简介

    Lucene是一个基于Java的全文索引工具包. 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史 全文检索的实现:Luene全文索引和数据库索引的比较 中文切分词机制简介:基 ...

  6. java技术入门培训_入门java怎么自学?推荐谁的课程?

    想要知道如何学习Java首先需要对她有一个大致的了解,Java是面向对象的编程语言,具有简单性.分布式.安全性.平台独立与可移植性.多线程.动态性等特点.现在多用于编写桌面应用程序.Web应用程序.分 ...

  7. java使用外部库_在Java中使用外部库

    java使用外部库 Java附带了一组核心库,其中包括定义常用数据类型和相关行为的库,例如String或Date : 与主机操作系统进行交互的实用程序,例如System或File : 有用的子系统来管 ...

  8. java命令行参数_一个 java 命令行参数顺序的坑

    tream Stream是在Java SE 8 API添加的用于增强集合的操作接口,可以让你以一种声明的方式处理集合数据.将要处理的集合看作一种流的创建者,将集合内部的元素转换为流并且在管道中传输, ...

  9. java mysql jdbc 封装_利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包括增删改查、JavaBean反射原理,附源代码)...

    近期看老罗的视频,跟着完毕了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完毕对数据库的增删改查.当中查询这块,包含普通的查询和利用反射完毕的查询,主要包含以下几个函数接口 ...

最新文章

  1. 每天都在用 Map,这些核心技术你知道吗?
  2. 利用PIX来搭建×××
  3. php mysql增改删_PHP分享:如何实现MySQL的增加删除修改查看
  4. 贝叶斯算法对文本进行分类实例
  5. SAP 电商云 Spartacus UI 点了 Shipping Method 之后的执行逻辑
  6. Nodejs 了解web服务器
  7. 64位x86的函数调用栈布局
  8. LINUX设备驱动之platform总线
  9. php pdo 抛出异常模式,php实现的PDO异常处理操作分析
  10. C# ToString
  11. 《大数据技术原理与应用》 期末复习
  12. 喜大普奔,润乾全功能中文开源BI来了
  13. mysql 命令行恢复数据库_使用MySQL命令行备份及恢复数据库
  14. charrnn 诗歌_代码不是诗歌,它只是代码
  15. 计算机无法读取tf卡,教您电脑无法读取sd卡
  16. PSpice for TI和TINA-TI的区别
  17. 从零开始学python的第14天
  18. 网络性能衡量指标总结
  19. 微信小程序使用canvas画布
  20. 高新技术企业的认定申请材料有哪些?

热门文章

  1. 彻底理解HashMap的元素插入原理
  2. 一张图弄懂java线程的状态和生命周期
  3. springboot+mybatis-plus实例demo
  4. 希尔排序+移位法(吊打交换法)
  5. 查看电脑重启日志_系统日志看硬盘故障图文教程,电脑日志查看磁盘硬盘坏道问题方法...
  6. ReviewForJob——java虚拟机的垃圾回收策略(个人总结)
  7. 基本数据类型与字符串的转换
  8. java联接pg库_Java14:使用Java 14的新记录联接数据库表
  9. stripe pay_J2Pay –完整示例
  10. jboss eap 7_EAP 7 Alpha和Java EE 7入门