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对象转换为其他对象。