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&lt;T>Stream&lt;R>
  • 我们还可以使用Map方法将其转换为 Stream&lt;T>Stream&lt;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);
		
	}
}