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

