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