Java 8流映射(Map)
时间:2020-02-23 14:34:54 来源:igfitidea点击:
在本教程中,我们将看到Java 8流映射(Map)函数。
流的MAP方法从输入流中获取单个元素,并生成单个元素以输出流。
单个输入流的类型和输出流可以不同。
Java 8流映射(Map)函数
<R> Stream<R> map(Function<? super T,? extends R>mapper)
映射(Map)函数返回由将给定函数应用于此流的元素的结果。
函数是Java 8 Java中可用的函数接口。
util.function.function接受一个输入并产生结果。
关于映射(Map)的一些重要点
- 映射(Map)是中间操作,并返回流量。
- MAP操作将函数扮演参数,并且在流的每个元素上调用此函数。
- Map()方法用于转换
Stream<T>
到Stream<R>
- 我们还可以使用Map方法将其转换为
Stream<T>
到Stream<T>
。
例如:呼叫toUppercase()
MAP方法中的方法,返回流<string>。
让我们在一个简单的例子的帮助下了解。
Java 8流映射(Map)示例
假设我们有一名员工列表,现在我们要将其转换为员工名称列表,因此我们将每个员工对象映射(Map)到员工名称。
我们将为员工对象提供输入,并将输出作为字符串流。
1.创建一个名为的程序 Employee.java
package org.igi.theitroad.map; public class Employee { String name; int age; public Employee(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
2.创建名为的主类 Java8StreamMapMain.java
package org.igi.theitroad.map; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class Java8StreamMapMain { public static void main(String args[]) { List<Employee> listOfEmployees = createListOfEmployees(); //Using map function to convert Stream<Employee> to Stream<Stream> List<String> listOfEmployeeNames=listOfEmployees.stream() .map(e -> e.getName()) .collect(Collectors.toList()); listOfEmployeeNames.forEach(System.out::println); } public static List<Employee> createListOfEmployees() { List<Employee> listOfEmployees=new ArrayList<>(); Employee emp1= new Employee("John",20); Employee emp2= new Employee("Martin",20); Employee emp3= new Employee("Mary",20); Employee emp4= new Employee("Steve",20); listOfEmployees.add(emp1); listOfEmployees.add(emp2); listOfEmployees.add(emp3); listOfEmployees.add(emp4); return listOfEmployees; } }
运行上面的程序时,我们将得到以下输出:
John Martin Mary Steve
以下是上述程序的逻辑表示。
我们可以在17行使用引用方法:
List<String> listOfEmployeeNames=listOfEmployees.stream() .map(Employee::getName) .collect(Collectors.toList());
另一个例子
让我们说你有整数列表,你想找到偶数的两倍。
package org.igi.theitroad.map; import java.util.Arrays; import java.util.List; public class Java8StreamMapNumber { public static void main(String[] args) { List<Integer> listOfNumbers=Arrays.asList(1,2,3,4,5,6,7,8,9,10); int sum= listOfNumbers.stream() .filter(n -> n%2==0) .map(n -> n*2) .reduce(0, Integer::sum); System.out.println(sum); } }