Java 8 map(),flatMap()示例

使用map()方法

编程时,很常见的是处理数据以便从对象集合中收集一些信息。

假设我们要从特定公司的所有员工中查找城市。 我们的员工班级如下。

public class Employee {private String name;private Integer age;private String city;private String state; private Department department;public String getCity() {return city;}public void setCity(String city) {this.city = city;} public String getState() {return state;}public void setState(String state) {this.state = state;}
}

我没有包括Employee类的所有属性,但是在这种情况下,我需要的是city属性。

因此,现在,我们有了Employee对象的列表,需要找出不同的城市。 让我们看看Java 8之前的方法。希望,您将编写以下代码来获得不同的城市。

List<Employee> employeeList = .....
Set<String> cities = new HashSet<String>();
for (Employee emp : employeeList) {cities.add(emp.getCity());
}

Java 8 Stream接口引入了map()方法,该方法以函数作为参数。 此函数应用于流中的每个元素并返回新流。 该代码将如下所示。

List<Employee> employeeList = new ArrayList<Employee>();
List<String> cities = employeeList.stream().map(Employee::getCity).distinct().collect(Collectors.toList());

使用flatMap()方法

Java 8 Stream接口引入了flatMap()方法,该方法可用于将几个流合并或拼合为单个流。

让我们举个例子。 假设我们想过滤掉文本文件中的不同单词。 查看以下文本文件。

Sri Lanka is a beautiful country in Indian ocean.
It is totally surrounded by the sea.

在Java 8中,我们可以使用一行读取文本文件,它将返回字符串流。 流的每个元素将是文本文件的一行。

Stream<String> lineStream = Files.lines(Paths.get("data.txt"), Charset.defaultCharset());

如果通过打印'lineStream'Stream看到上述代码的输出,则将是文本文件的行。

接下来,我们可以将上述流的每个元素转换为单词流。 然后,我们可以使用flatMap()方法将所有单词流扁平化为单个Stream。 如果我们对lineStream Stream的每个元素执行以下代码,我们将获得两个单词流。 请参阅以下代码。

line -> Arrays.stream(line.split(" "))

两个单词流如下。

Stream 1 : [SriLanka][is][a][beautiful][country][in][Indian][ocean.]} 
Stream 2 : [It][is][totally][surrounded][by][the][sea.]

flatMap()方法可以将这两者平化为单个单词流,如下所示。

Stream<String> wordStream = lineStream.flatMap(line -> Arrays.stream(line.split(" ")));

如果打印上述wordStream的元素,它将是文本文件中的所有单词。 但是,您仍然会看到重复的单词。 您可以使用distinct()方法来避免重复。 这是最终代码。

List<String> wordStream = lineStream.flatMap(line -> Arrays.stream(line.split(" "))).distinct().collect(Collectors.toList());

如果仔细观察,您只需在Java 8中使用两行代码即可找到文本文件的不同单词。

翻译自: https://www.javacodegeeks.com/2018/07/java-8-map-flatmap-examples.html

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

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

相关文章

[渝粤题库]陕西师范大学《幼儿园科学教育》作业

《幼儿园科学教育》作业 一、填空题 1&#xff0e;科学教育中常采用的观察方法是 ① 、 ② 、 ③ 。 2&#xff0e;幼儿劳动的种类包括 ① 、 ② 、 ③ 、 ④ 。 3&#xff0e;在幼儿科学教育中&#xff0c;情感的目标非常广泛…

HTML中button怎么填充GIF,css3给按钮添加背景渐变动画

css3给按钮添加背景渐变动画button {color:#FFF;font-size:16px;outline:none;width:300px;height:48px;background:#26A1D9;border:none;-webkit-border-radius:5px;border-radius:5px;}button:active{outline:none;background:#208FC1;/*执行动画*/-webkit-animation:showBtn…

[渝粤题库]陕西师范大学《幼儿园语言教育》作业

《幼儿园语言教育》作业 一、填空题 1、儿童语言的发展是指儿童对母语的理解和 能力随着时间的推移而发生变化的过程和现象。 2、儿童获得语言之前&#xff0c;用语音及伴随的表情或动作代替语言进行交往的现象被称为 。 3、 是指交际双方根据交际目…

[渝粤题库]陕西师范大学《商业银行经营学》作业

《商业银行经营学》作业 一 、名词解释 1&#xff0e;商业银行外部组织形式 2&#xff0e;单一银行制 3&#xff0e;银行控股公司制 4&#xff0e;合业经营 5&#xff0e;自有资本 6&#xff0e;可转让定期存单(CD) 7&#xff0e;自动转账服务账户(ATS) 8&#xff0e;回…

导数,微分,偏导,全微分,方向导数,梯度

多元函数与一元函数有一个很大的区别在于定义域的不同&#xff1a;一元函数自变量就在x轴上&#xff0c;因此趋近的方向只有某点的左右两侧&#xff0c;因此&#xff0c;考察一元函数极限的时候&#xff0c;仅考虑左邻域和右邻域即可。但是多变量微分变得复杂&#xff0c;趋向方…

html5贝塞尔,使用HTML5画布绘制贝塞尔曲线

是的&#xff0c;请使用HTML canvasbezierCurveTo()方法在HTML5中绘制Bezier曲线。示例您可以尝试运行以下代码以使用画布绘制贝塞尔曲线&#xff1a;HTML>#test {width: 100px;height:100px;margin: 0px auto;}function drawShape(){//使用DOM获取canvas元素var canvas do…

[渝粤题库]陕西师范大学《幼儿园课程》(专科)作业

《幼儿园课程》&#xff08;专科&#xff09;作业 一、单选题 1、活动课程是以&#xff08; &#xff09;为中心来组织学习内容的。 A 学科 B 问题 C 概念 D 儿童 2、&#xff08; &#xff09;指的…

perl大骆驼和小骆驼_骆驼路线的主/从故障转移

perl大骆驼和小骆驼一种实现主/从故障转移模式的方法是拥有一个应用程序的实例集群&#xff0c;其中一个实例&#xff08;主实例&#xff09;当前处于活动状态&#xff0c;而其他实例&#xff08;从属实例&#xff09;处于待机状态&#xff0c;随时可以在主实例发生故障时接管该…

牛顿法, Jacobian矩阵 和 Hessian矩阵

牛顿法 主要有两方面的应用&#xff1a; 求方程的根&#xff1b;求解最优化方法&#xff1b; 为什么要用牛顿法求方程的根&#xff1f; 问题很多&#xff0c;牛顿法 是什么&#xff1f;目前还没有讲清楚&#xff0c;没关系&#xff0c;先直观理解为 牛顿法是一种迭代求解方法…

[渝粤题库]陕西师范大学《幼儿保健学》作业

《幼儿保健学》作业 单选题 1、人一生总共&#xff08; &#xff09;块腕骨。 A 6 B 7 C 8 D 9 2、营养学中常用的能量单位是&#xff08; &#xff09;。 A 千卡 B 焦耳 C 瓦特 …

微型计算机组装实验报告虚拟,计算机硬件的组装实验报告.doc

计算机硬件的组装实验报告.doc计 算 机 硬 件 的 组 装 实验时间3月30日晚600-900 学号 姓名 一、实验目的1.加深对理论知识的理解&#xff0c;提高实际动手能力&#xff1b;2.了解计算机的主要部件&#xff0c;理解各部件的功能&#xff0c;了解微型机的各项技术指标和参数。3…

[渝粤教育】陕西师范大学《教育社会学》作业

《教育社会学》作业 一、 单项选择题 1&#xff0e;从研究对象上讲&#xff0c;教育社会学探究的主要是 A.广义教育 B.中观教育 C.狭义教育 D.社会教育 2&#xff0e;教育社会对自身以外的其他社会现象所发生的功能是 …

奇异矩阵,非奇异矩阵,伪逆矩阵

奇异矩阵就是Singular Matrix 的中文翻译。 Singular 就是唯一的&#xff0c;可以想成是单身狗&#xff0c;所以他没有对象 逆矩阵。 Non-singular的非奇异矩阵就是Couple 有逆矩阵。 奇异矩阵 奇异矩阵是线性代数的概念&#xff0c;就是对应的行列式等于0的矩阵。 奇异矩阵…

ActiveMQ性能测试

我们使用ActiveMQ作为消息传递层–发送大量需要低延迟的消息。 通常它可以正常工作&#xff0c;但是在某些情况下我们遇到了性能问题。 在花了太多时间测试我们的基础架构之后&#xff0c;我想我已经学到了有关ActiveMQ的一些有趣的东西&#xff1a;它可能真的很慢。 尽管一般…

计算机网络严楠,安徽工程大学

安徽工程大学是一所以工为主的省属多科性高等院校&#xff0c;是安徽省高校综合改革首批试点院校、安徽省系统推进全面创新改革试验高校创新自主权改革试点单位&#xff0c;入选教育部新工科研究与实践项目。 学校办学历史始于1935年创设的安徽私立内思高级工校&#xff0c;历经…

渝粤教育 陕西师范大学 《JAVA程序设计》作业

《JAVA程序设计》作业 一、选择题 编译HelloWorld.java的正确命令是&#xff1a; java HelloWorld.class B)java HelloWorld.java C)javac HelloWorld.java正确运行HelloWorld.java的正确命令是&#xff1a; java HelloWorld B&#xff09;javac HelloWorld.java C&#…

垃圾收集算法,垃圾收集器_垃圾收集器准则和提示

垃圾收集算法,垃圾收集器这些是我需要调整GC时通常会看到的一些准则和技巧。 主要由以下两本书组成&#xff0c;而根据我的经验却很少&#xff1a; Java性能 JBoss AS 5性能调优 希望它们对在那里的其他人有用&#xff01; 垃圾收集器 XX:AggressiveOpts将HotSpot内部布尔变…

【渝粤题库】陕西师范大学 《道德教育案例研究》作业

《道德教育案例研究》作业 一、单选题 1.“在集体中进行教育的原则”是教育家&#xff08;      &#xff09;首先提出的 。  A 、马卡连柯   B 、赞科夫   C 、苏霍姆林斯基   D、 加里宁 2.现代德育在德育方法上&#xff08;      &#xff0…

小自考计算机专业代码,自学考试有关专业分类及其代码

(摘自考委21号文件&#xff1a;高等教育自学考试专业及课程代码)专科&#xff1a;一级学科二级学科专 业工学08管理工程类0822计算机信息管理082207&#xff0c; 管理工程082201&#xff0c;工业外贸082203&#xff0c; 技术监督管理082204&#xff0c;建筑经济管理082209&…

3SAT问题

3-Satisfiability (3Sat) https://samjjx.github.io/2019/03/14/3sat2ds/