Java中Map和Flatmap之间的区别

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

在本教程中,我们将看到java.i中的map和flatMap之间的区别

如我们所知,流的Map和FlatMap方法都可以应用于Stream <T>并将流<R>返回为输出。

实际差异是,MAP操作产生一个输入值的一个输出值,但是为每个输入值产生零个或者多次值的零件。
让我们在简单的例子的帮助下了解。

Stream map 和 flatMap的比较

我们有字符串列表,我们希望使它们大写,在这种情况下,我们可以简单地使用map函数如下。

package org.arpit.theitroad.map;
 
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
 
public class Java8MapExample {
	public static void main(String[] str)
	{
		List<String> listOfCountries=Arrays.asList("Netherlands","China","Nepal","Bhutan");
		
		List<String> listOfCountriesUppercase=listOfCountries.stream()
				                              .map(String::toUpperCase)
				                              .collect(Collectors.toList());
		listOfCountriesUppercase.forEach(System.out::println);
	}
}

如果我们有更复杂的数据结构,例如字符串列表列表(列表<list <string >>)

假设我们有一个城市列表列表(list <list <string >>),我们希望查找以"t"开头的所有引用。
我们不能直接在列表<list <string >>上使用过滤器,这是不起作用。
我们需要使用FlatMap来平整列表,然后使用过滤器来获取结果。

package org.arpit.theitroad.flatMap;
 
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
 
public class Java8FlatMapExample {
	public static void main(String[] str)
	{
		List<List<String>> listofListOfCities=Arrays.asList(Arrays.asList("Delhi","Mumbai"),
				Arrays.asList("Beijing","Shanghai","Tianjin"),
				Arrays.asList("Landon","Paris"),
				Arrays.asList("SanFrancisco","NewYork"));
		
		List<String> listOfCitiesUppercase=listofListOfCities.stream()
				                              .flatMap(citiesByCountries -> citiesByCountries.stream())
				                              .filter(s -> s.startsWith("T"))
				                              .collect(Collectors.toList());
		listOfCitiesUppercase.forEach(System.out::println);
	}
}