java 8流在另一个流_Java 8流图

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;
	}

	@Override
	public 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流在另一个流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值