Java 8 Stream map
时间:2020-02-23 14:36:19 来源:igfitidea点击:
Java 8 Stream map函数可用于对其所有元素执行某些操作。
Java Stream map是一个中间操作,因此它返回Stream。
Java 8流映射
以下是Java 8 Stream接口中声明的map方法。
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
流映射方法将" Function"作为参数,它是一个功能接口。
现在让我们看一下流图方法变得有用的一些示例。
Java Stream映射示例
假设我们有一个名称列表,并且我们想查找在某些Oracle数据库表中存在的名称。
现在,由于Oracle是区分大小写的,因此我们可以将字符串列表转换为大写,然后在数据库端可以将to_upper方法用于SQL查询。
通常在Java 8之前,我们可以使用for循环来实现它,如下所示。
List<String> names = Arrays.asList("hyman", "amit", "DAVID");
List<String> upperCaseNames = new ArrayList<>();
for (String n : names) {
upperCaseNames.add(n.toUpperCase());
}
//now send upperCaseNames for processing
我们可以使用java流映射函数来完成相同的操作,如下所示。
upperCaseNames = names.stream().map(t -> t.toUpperCase()).collect(Collectors.toList());
我们也可以像下面这样写。
upperCaseNames = names.stream().map(String::toUpperCase).collect(Collectors.toList());
带对象的Java Stream映射示例
现在,让我们看一下更实用的流图使用示例。
我们有一个Emp类,如下所示。
package com.theitroad.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;
}
}
我们有一种获取所有员工数据的方法。
现在,我们希望将员工数据传递到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);
}
现在使用Java 8流映射功能,我们可以像下面一样做同样的事情。
empForHR = allEmpList.stream().map(e -> {
e.setSalary(0L);
return e;
}).collect(Collectors.toList());
以下是带有对象转换的java流映射示例的最终程序。
package com.theitroad.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, "hyman", 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;
}
}
当我们运行上面的程序时,我们得到下面的输出。
[1hyman100SE, 2David200QE, 3Lisa300CEO] [1hyman0SE, 2David0QE, 3Lisa0CEO] [1hyman0SE, 2David0QE, 3Lisa0CEO]
我们还可以在map方法Function实现中将Emp对象转换为其他对象。

