Java 8 Stream FlatMap

时间:2020-02-23 14:34:54  来源:igfitidea点击:

在本教程中,我们将看到Java 8 Stream Flatmap函数。
在Movent Flatmap中,我们应该通过Stream的映射函数

Stream的Flatmap方法从输入流中获取单个元素,并产生任何数量的输出值并使结果输出流输出流。
当我们在流的每个元素上应用FlatMap函数时,它会导致值流而不是单个值。
流的映射函数。

Java 8流FlatMap函数

<R> Stream<R>	flatMap(Function<? super T,? extends Stream<? extends R>> mapper)

根据Java文档,Stream的Flatmap返回由通过将提供的映射函数应用于每个元素而产生的映射流的内容来返回由替换该流的每个元素的结果组成的流。

使困惑?
别担心,例子将非常清楚。
函数是Java 8 Java中可用的函数接口。

util.function.function接受一个输入并产生结果。
让我们在一个简单的例子的帮助下了解。

Java 8 Stream FlatMap示例

让我们说你有员工程序。
每个员工都有他们过去居住的城市名单。
我们需要查找员工住在的所有城市的列表。

例如:让我们说Ramesh住在德里,孟买和雷克哈已经住在德里浦那,然后输出将是德里,孟买,浦那。

因此,我们将使用FlatMap函数将每个员工映射到CITES列表,以便将其平坦,然后以集合的形式收集。

1.创建一个名为"employee.java"的类

package org.igi.theitroad.flatMap;
 
import java.util.List;
 
public class Employee {
 
	String name;
	int age;
	List<String> listOfCities;
	
	public Employee(String name, int age,List<String> listOfCities) {
		super();
		this.name = name;
		this.age = age;
		this.listOfCities=listOfCities;
	}
	
	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;
	}
 
	public List<String> getListOfCities() {
		return listOfCities;
	}
 
	public void setListOfCities(List<String> listOfCities) {
		this.listOfCities = listOfCities;
	}
	
}

2.创建名为"java8streammapmain.java"的主类

package org.igi.theitroad.flatMap;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
 
public class Java8StreamMapMain {
 
	public static void main(String args[])
	{
		List<Employee> listOfEmployees = createListOfEmployees();
		
		Set<String> listOfCities=listOfEmployees.stream()
										.flatMap(e -> e.getListOfCities().stream()) 
										.collect(Collectors.toSet());
		listOfCities.forEach(System.out::println);
	}		
	
	public static List<Employee> createListOfEmployees()
	{
		List<Employee> listOfEmployees=new ArrayList<>();
		Employee emp1= new Employee("Ankit",20,Arrays.asList("Delhi","Mumbai"));
		Employee emp2= new Employee("Shilpa",24,Arrays.asList("Kolkata","Pune"));
		Employee emp3= new Employee("Megha",20,Arrays.asList("Delhi","Patna"));
		Employee emp4= new Employee("Mohan",20,Arrays.asList("Banglore","Pune"));
		listOfEmployees.add(emp1);
		listOfEmployees.add(emp2);
		listOfEmployees.add(emp3);
		listOfEmployees.add(emp4);
		return listOfEmployees;
	}
}

运行上面的程序时,我们将得到以下输出:

Delhi Patna Banglore Kolkata Pune Mumbai

另一个例子

假设我们有2D数组整数,并且在将每个元素加倍后,我们需要创建一个扁平的整数列表。

package org.igi.theitroad.flatMap;
 
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
public class Java8StreamFlatMapNumber {
 
	public static void main(String[] args)
	{
		int[][] numbers={
				{1,2},
				{3,4},
				{5,6}
		};
		 //Stream<int[]>
        Stream<int[]> temp = Arrays.stream(numbers);
		List<Integer> listOfIntegers= temp
				.flatMap( x -> Arrays.stream(x).boxed())
				.map(e -> 2*e)
				.collect(Collectors.toList());
		
		System.out.println(listOfIntegers);
		
	}
}