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

