提取Java集合的元素-Java 8方法

我们所有人都广泛使用了Collection类,例如List,Map及其派生版本。 每次使用它们时,我们都必须遍历它们以找到某个元素或更新这些元素,或者找到匹配某个条件的不同元素。 考虑如下所示的人员列表:

List<Person> personList = new ArrayList<>();
personList.add(new Person('Virat', 'Kohli',22));
personList.add(new Person('Arun', 'Kumar',25));
personList.add(new Person('Rajesh', 'Mohan', 32));
personList.add(new Person('Rahul', 'Dravid', 35));

要找出年龄大于30岁的所有Person实例,我们可以这样做:

List<Person> olderThan30OldWay = new ArrayList<>();
for ( Person p : personList){if ( p.age >= 30){olderThan30OldWay.add(p);}
}
System.out.println(olderThan30OldWay);

这给了我输出为:

[Rajesh Mohan, 32, Rahul Dravid, 35]

该代码易于编写,但是是否更冗长一些,尤其是在迭代部分? 我们为什么要迭代? 如果有一个API可以迭代内容并给我们最终结果,即我们给出源List并使用一系列方法调用来获得我们正在寻找的结果List,那不是很酷吗? 是的,这在其他语言(例如Scala,Groovy)中是可行的,它们支持传递闭包,也支持内部迭代。 但是Java开发人员有解决方案吗? 是的,通过引入对Lambda Expressions(closures)的支持和增强的Collection API来利用lambda Expression支持,可以解决这个确切的问题。 令人遗憾的消息是它将成为Java 8的一部分,并且将需要一些时间才能进入主流开发。

利用Java 8对上述情况的增强

正如我在增强Collections API以支持Lambda Expression的使用之前所说的那样,可以在这里阅读有关它的更多信息。 JDK团队没有将所有新的API添加到Collection类,而是创建了一个称为“ Stream”的新概念,并在该类中添加了大多数API。 “流”是从创建集合的集合中获取的元素序列。 要了解有关Stream类起源的更多信息,请参考此文档 。 为了实现从使用Java 8中的增强功能开始的示例,我们将使用一些新的API,即:stream(),filter(),collect(),Collectors.toCollection()。
stream() :使用在其上调用此API的集合来创建Stream类的实例。
filter() :此方法接受一个lambda表达式,该表达式接受一个参数并返回一个布尔值。 编写此lambda表达式可以替代实现Predicate类。 collect() :此方法有2个重载版本。 我在这里使用的是一个Collector实例。 此方法获取流的内容并构造另一个集合。 此构造逻辑由收集器定义。 Collectors.toCollection() : 收藏家是一个工厂收集 。 并且toCollection()采用Lambda表达式/方法引用,该引用应返回Collection类的任何派生类的新实例。

简要介绍所使用的API之后,让我展示与第一个代码示例等效的代码:

List<Person> olderThan30 = //Create a Stream from the personListpersonList.stream().//filter the element to select only those with age >= 30filter(p -> p.age >= 30).//put those filtered elements into a new List.collect(Collectors.toCollection(() -> new ArrayList<Person>()));
System.out.println(olderThan30);

上面的代码同时使用了内部迭代和lambda表达式,使其直观,简洁且令人耳目一新。 如果您不熟悉Lambda表达式的概念,请查看我以前的文章 ,其中简要介绍了Lambda表达式。

参考:从Javas 合作伙伴 Mohamed Sanaulla的Experiences Unlimited博客中提取Java集合的元素-Java 8方法 。

翻译自: https://www.javacodegeeks.com/2013/03/extracting-the-elements-of-the-java-collection-the-java-8-way.html

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

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

相关文章

D2

依托 Weex 的能力&#xff0c;轻舟平台使得前端开发人员可以基于 Vue 或者 Rax&#xff08;类 React&#xff09;开发媲美原生的 App。 不需要学习各类 Native 开发语言&#xff1b;不需要搭建复杂的编译打包环境&#xff0c;轻舟提供的一站式集成开发解决方案全部帮你搞定。吴…

hibernate5--主键生成策略

1、hibernate自己维护主键的值。首先获取该表中最大主键值&#xff0c;然后加一插入。主键字段对应的属性类型可以是int、short、long以及其封装类型。在高并发或者集群的情况下不能使用。 2、identity&#xff1a;使用数据库自身自增长来维护。 <id name"id" col…

vue watch 第一次不执行_Vue 实现前进刷新,后退不刷新的效果

https://github.com/woai3c/Front-end-articles​github.com需求一&#xff1a;在一个列表页中&#xff0c;第一次进入的时候&#xff0c;请求获取数据。点击某个列表项&#xff0c;跳到详情页&#xff0c;再从详情页后退回到列表页时&#xff0c;不刷新。也就是说从其他页面进…

win8计算机安全模式,安全模式,详细教您Win8怎么进入安全模式

电脑的用途在我们的日常生活之中体现的是最为突出了&#xff0c;比方说网上购物、看电视、玩游戏、做文件什么的都用得着电脑。但是有用户遇到了Win8系统按F8无法进入安全模式怎么办&#xff1f;非也&#xff0c;非也&#xff0c;下面&#xff0c;小编给大家带来了Win8进入安全…

元素加了position:absolute则该元素的text-align:center居中失效的解决办法

position:absolute;top:50%;left:50%;-webkit-transform: translate(-50%,-50%);-moz-transform: translate(-50%,-50%);transform:translate(-50%,-50%); 当元素变为position:absolute时&#xff0c;该元素不占据文档流&#xff0c;text-align&#xff1a;center失效&#xff…

elasticsearch-6.0.1安装

elasticsearch-6.0.1安装 0. 介绍&#xff1a;ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff1b;是目前全文搜索引擎的首选。Elastic 的底层是开源库 Lucene。但是&#xff0c;没法直接用 Lucene&#xff0c;必须自己写代码…

使用GlassFish 4.0测试驱动Java API以处理JSON

编写规范并为其做出贡献是一回事。 如果您想提供宝贵的反馈意见&#xff0c;请使用它并研究真实的示例。 最新推广的GlassFish构建包含重命名为4.0&#xff0c;我认为现在是对Java处理JSON&#xff08;JSON-P&#xff09;API进行测试的好时机。 获取启用了Java EE 7的GlassFis…

查询已有链表的hashmap_原创 | 面试不再慌,看完这篇保证让你写HashMap跟玩一样...

点击上方蓝色小字&#xff0c;关注“码农小黑屋”重磅干货&#xff0c;第一时间送达今天这篇文章给大家讲讲hashmap&#xff0c;这个号称是所有Java工程师都会的数据结构。为什么说是所有Java工程师都会呢&#xff0c;因为很简单&#xff0c;他们不会这个找不到工作。几乎所有面…

华为p40手机自带计算机,华为p40pro支持PC模式吗_华为p40pro能连接至电脑模式吗

华为p40pro支持PC模式吗&#xff1f;华为p40pro能连接至电脑模式吗&#xff1f;从前几年开始&#xff0c;就有部分华为手机可以支持PC模式了。这个模式在出差的时候还是很实用的&#xff0c;可以直接将手机上的内容投屏到投影仪等大屏设备上&#xff0c;不需要带笔记本电脑&…

工欲善其事

持续补充更新中....... 工具箱汇总 娄老师的超强百宝箱 &#xff08;必看&#xff01;&#xff01;&#xff09;张老师 的总结 在博客中插入代码作业高分博客指南冲刺博客指南环境搭建 Git和Github教程Git简明指南猴子都能懂的GIT入门Coding使用方法如何使用Git和码云转载于:ht…

在Bootstrap框架中,form-control的效果

在Bootstrap框架中&#xff0c;通过定制了一个类名form-control&#xff0c;也就是说&#xff0c;如果这几个元素使用了类名“form-control”&#xff0c;将会实现一些设计上的定制效果。 1、宽度变成了100% 2、设置了一个浅灰色&#xff08;#ccc&#xff09;的边框 3、具有…

ubuntu 使用apt-get install 安装php5.6--php7

使用ppa增加源:$ sudo apt-get install python-software-properties $ sudo add-apt-repository ppa:ondrej/php $ sudo apt-get update $ sudo apt-get install -y php7.0 php7.0-mysql php7.0-curl php7.0-json php7.0-cgi然后可以查看php版本:php -v关于php5.4--php5.6版本 …

实体管理器的类型:应用程序管理的EntityManager

JPA规范定义了几种类型的EntityManagers / Persistence Context。 我们可以有&#xff1a; 扩展的和事务范围的EntityManager&#xff0c; 容器管理或应用程序管理的EntityManager。 JTA或本地资源EntityManager&#xff0c; 除了上述区别外&#xff0c;我们还可以在其中存…

的内怎么放_汽车后备箱的“四不放”原则,你知道吗?网友:怎么不早说

汽车已经开始存在在越来越多的家庭当中了&#xff0c;也正是因为这样&#xff0c;很多人会把汽车当做一个自己的家庭成员&#xff01;而在汽车的使用过程当中&#xff0c;汽车的后备箱往往是放的特别满的&#xff0c;以为这样可以备不时之需&#xff0c;但是老司机也告知大家&a…

as3 访问远程计算机,本地swf不能访问网络的解决办法

本地swf不能访问网络的解决办法作者&#xff1a;小龙博客 2011年03月21日  4条评论 分类&#xff1a;AS3 学习 flash 软件本地swf不能访问网络的解决办法&#xff1a;学习过http://www.lxlong.com/blog“)这样的代码&#xff0c;在测试影片时可以通过navigateToURL方法打开…

Compatibility Telemetry(CompatTelRunner.exe) 占用硬盘100%困扰

Compatibility Telemetry(CompatTelRunner.exe) 占用硬盘100%困扰&#xff0c;Compatibility Telemetry翻译过来就是“微软兼容性检测”的意思&#xff0c;找了半天终于找到了干掉这个兼容性检测的办法。 禁用服务 控制面板–管理工具 — 服务 — 手动&#xff08;或者禁止&…

Java基础知识学习04-自定义类、ArrayList集合

类与对象 类是一个模子&#xff0c;确定对象将会拥有的特征&#xff08;属性&#xff09;和行为&#xff08;方法&#xff09;。 类的特征&#xff1a;类是对象的类型 具有相同属性和方法的一组对象的集合 类的组成&#xff1a;属性和方法 定义一个类&#xff1a;public class …

监视和管理GlassFish 3的多种方法

GlassFish 3支持多种监视和管理方法。 在本文中&#xff0c;我将简要介绍GlassFish提供的管理&#xff0c;监视和管理方法。 GlassFish管理控制台 GlassFish基于Web的管理控制台GUI可能是GlassFish管理最著名的界面。 默认情况下&#xff0c;运行GlassFish后&#xff0c;可通过…

幸运抽奖

var oPointerdocument.getElementsByTagName("img")[0];var oTurnabledocument.getElementsByTagName("img")[1];var cat15;//每个区域15度&#xff0c;一共24个区域var num0;var offOntrue;//是否正在抽奖//指针点击事件&#xff0c;开始抽奖oPointer.onc…

linux usleep 线程控制权_linux多线程同步—信号量

linux多线程编程-信号量信号量机制锁机制使用是有限制的&#xff0c;锁只有两种状态&#xff0c;即加锁和解锁&#xff0c;对于互斥的访问一个全局变量&#xff0c;这样的方式还可以对付&#xff0c;但是要是对于其他的临界资源&#xff0c;比如说多台打印机等&#xff0c;这种…