java 8流在另一个流

Java 8 Stream map function can be used to perform some operation on all of it’s elements. Java Stream map is an intermediate operation, so it returns Stream.

Java 8 Stream map函数可用于对其所有元素执行某些操作。 Java Stream映射是一个中间操作,因此它返回Stream。

Java 8流图 (Java 8 Stream Map)

Below is the map method declared in Java 8 Stream interface.

以下是Java 8 Stream接口中声明的map方法。

<R> Stream<R> map(Function<? super T, ? extends R> mapper);

Stream map method takes Function as argument that is a functional interface.

流映射方法将Function作为函数接口的参数。

Let’s now look at some example where stream map method become useful.

现在让我们看一些流映射方法变得有用的示例。

Java Stream映射示例 (Java Stream map example)

Let’s assume we have a list of names and we want to find which of them are present in some Oracle database table. Now since Oracle is case sensitive, we can convert list of string to upper case and then at the database side we can use to_upper method with SQL query.

假设我们有一个名称列表,并且我们想查找在某些Oracle数据库表中存在的名称。 现在,由于Oracle是区分大小写的,因此我们可以将字符串列表转换为大写,然后在数据库端可以将to_upper方法用于SQL查询。

Usually before java 8, we can do it using for loop as shown below.

通常在Java 8之前,我们可以使用for循环来实现它,如下所示。

List<String> names = Arrays.asList("Pankaj", "amit", "DAVID");List<String> upperCaseNames = new ArrayList<>();
for (String n : names) {upperCaseNames.add(n.toUpperCase());
}
// now send upperCaseNames for processing

We can do the same thing using java stream map function as shown below in a single line.

我们可以使用java流映射函数来完成相同的操作,如下所示。

upperCaseNames = names.stream().map(t -> t.toUpperCase()).collect(Collectors.toList());

We can also write it like below.

我们也可以像下面这样写。

upperCaseNames = names.stream().map(String::toUpperCase).collect(Collectors.toList());

带对象的Java Stream映射示例 (Java Stream map example with objects)

Now let’s look at more practical example of Stream map usage. We have an Emp class as below.

现在,让我们看一下流图用法的更实际示例。 我们有一个Emp类,如下所示。

package com.journaldev.examples;public class Emp {private int id;private String name;private long salary;private String designation;public Emp(int i, String n, long s, String d) {this.id = i;this.name = n;this.salary = s;this.designation = d;}@Overridepublic String toString(){return id+name+salary+designation;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public long getSalary() {return salary;}public void setSalary(long salary) {this.salary = salary;}public String getDesignation() {return designation;}public void setDesignation(String designation) {this.designation = designation;}}

We have a method to get all the employees data. Now we want to pass employees data to HR system but we don’t want to disclose the salary. So we will have to use below code to process each employee and remove their salary.

我们有一种获取所有员工数据的方法。 现在我们想将员工数据传递到HR系统,但是我们不想透露薪水。 因此,我们将必须使用以下代码来处理每个员工并除去他们的薪水。

List<Emp> empForHR = new ArrayList<>();for(Emp e : allEmpList){Emp temp = new Emp(e.getId(),e.getName(),e.getSalary(),e.getDesignation());temp.setSalary(0);empForHR.add(temp);}

Now using java 8 stream map function, we can do the same thing like below.

现在,使用Java 8流映射功能,我们可以像下面一样进行操作。

empForHR = allEmpList.stream().map(e -> {e.setSalary(0L);return e;}).collect(Collectors.toList());

Below is the final program for java stream map example with object transformation.

以下是带有对象转换的java流映射示例的最终程序。

package com.journaldev.examples;import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;public class JavaStreamMapExample {public static void main(String[] args) {List<Emp> allEmpList = getAllEmps();System.out.println(allEmpList);List<Emp> empForHR = new ArrayList<>();for(Emp e : allEmpList){Emp temp = new Emp(e.getId(),e.getName(),e.getSalary(),e.getDesignation());temp.setSalary(0);empForHR.add(temp);}System.out.println(empForHR);empForHR = allEmpList.stream().map(e -> {e.setSalary(0L);return e;}).collect(Collectors.toList());System.out.println(empForHR);}private static List<Emp> getAllEmps() {List<Emp> el = new ArrayList<>();Emp e1 = new Emp(1, "Pankaj", 100L, "SE");el.add(e1);Emp e2 = new Emp(2, "David", 200L, "QE");el.add(e2);Emp e3 = new Emp(3, "Lisa", 300L, "CEO");el.add(e3);return el;}}

When we run the above program, we get below output.

当我们运行上面的程序时,我们得到下面的输出。

[1Pankaj100SE, 2David200QE, 3Lisa300CEO]
[1Pankaj0SE, 2David0QE, 3Lisa0CEO]
[1Pankaj0SE, 2David0QE, 3Lisa0CEO]

We can also convert the Emp object to some other object in the map method Function implementation.

我们还可以在map方法Function实现中将Emp对象转换为其他对象。

That’s all for java 8 stream map examples.

Java 8流映射示例的全部内容。

Reference: Official JavaDoc

参考: 官方JavaDoc

翻译自: https://www.journaldev.com/14103/java-8-stream-map

java 8流在另一个流

java 8流在另一个流_Java 8流图相关推荐

  1. java 8流在另一个流_Java 8流– Java流

    java 8流在另一个流 Welcome to Java 8 Stream API tutorial. In the last few java 8 posts, we looked into Jav ...

  2. Java stream 将两个具有相同属性的流合并成一个流

    场景 第一个流中的某个属性 需要第二个流来附上 如 流 1 含有 id 和 status 以及其他属性 status 属性值为空 需要 流 2 根据 id 相等 来附上 流 2 只含有 id 和 st ...

  3. java参数传入的是一个类名_Java编程细节——泛型的定义(类、接口、对象)、使用、继承...

    1. 设计泛型的初衷: 1) 主要是为了解决Java容器无法记忆元素类型的问题: i. 由于Java设计之初并不知道会往容器中存放什么类型的元素,因此元素类型都设定为Object,这样就什么东西都能放 ...

  4. java调用构造函数中某一个值_Java如何在枚举的构造函数中调用另一个枚举值

    Java中的枚举(enum)是一种存储一组常量值的数据类型.您可以使用枚举来存储固定值,例如一周中的天,一年中的月等. 您可以使用关键字 enum定义枚举,后跟枚举的名称为-enum Days { S ...

  5. java 如何跳到上一个循环_Java 代码优化 Java 如何写好 一个 for 循环

    Java 代码优化 Java 如何写好 一个 for 循环 Java 代码优化 Java 如何写好 一个 for 循环 看到这个标题可能吓一跳,观众可能会有如下的OS ......... 满脸的不屑, ...

  6. java去除字符串中最后一个字符_java中字符串如何去除最后一个字符方法

    java中字符串如何去除最后一个字符方法. 方法有很多.不过如果只是个测试,那哪种都可以. 最简单易懂的方法 利用substring()与length() String str = "abc ...

  7. java类里面再定一个类_java类的里面可以再定义一个类吗 java里可不可以在一个...

    java类里面还可以定义一个类,即内部类. java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性 (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的. ...

  8. java 扁平化_java8 stream flatMap流的扁平化操作

    概念:Steam 是Java8 提出的一个新概念,不是输入输出的 Stream 流,而是一种用函数式编程方式在集合类上进行复杂操作的工具.简而言之,是以内部迭代的方式处理集合数据的操作,内部迭代可以将 ...

  9. java中的常用的文件流_Java 基础(四)| IO 流之使用文件流的正确姿势

    image.png 一.什么是 IO 流? 想象一个场景:我们在电脑上编辑文件,可以保存到硬盘上,也可以拷贝到 U 盘中.那这个看似简单的过程,背后其实是数据的传输. 数据的传输,也就是数据的流动.既 ...

最新文章

  1. MySQL数据库的优化(下)MySQL数据库的高可用架构方案
  2. 给所有想从事软件研发的年轻工程师的忠告与建议
  3. mysql - Docker Wordpress连接到本地主机上的数据库服务器
  4. 代码规范之prettier+eslint实践
  5. 一个简单的iBatis入门例子
  6. putty连上l虚拟机中的linux要点
  7. 《A.I.爱》王力宏与人工智能谈恋爱 邀李开复来客串
  8. Pandownload作者被抓后,我决定用docker搭建一款私有网盘
  9. CMake 简单入门
  10. 分形理论的Hausdorff维数
  11. VBlog项目代码理解之后端
  12. xheditor ajax上传,xheditor
  13. BUG(12) : Configured service account doesn‘t have access. Service account may have been revoked. pod
  14. 2015年3月1日起停止提供4年或5年SSL证书
  15. csr867x入门之按键配置(九)
  16. 各种快捷的格式转换:图片转.ico,去图片白底
  17. 什么是HashMap?不同版本的HashMap有什么不同?浅谈HashMap
  18. cisco packet tracer配置网络路由
  19. 【一行代码系列】Python 的多线程
  20. Vue + Spring Boot 项目实战(三):前后端结合测试(登录页面开发)

热门文章

  1. MyEclipse7.0及JDK1.6.0的安装及配置过程(修改)
  2. sql2005数据库备份—sql语句
  3. [转载] python set()集合快速比较两个列表内的元素是否一致
  4. [转载] Python3 * 和 ** 运算符
  5. C#方法的六种参数,值参数、引用参数、输出参数、参数数组、命名参数、可选参数...
  6. 流量限制器(Flux Limiter)
  7. Python---copy()、deepcopy()与赋值的区别
  8. 【计算机视觉-从入门到精通系列】 第三章 立体匹配
  9. 自动驾驶算法-滤波器系列(四)——不同运动模型在KF/EKF中的应用
  10. 解决linux普通用户ls不显示颜色的问题