Java 流中 map()和 flatMap()的区别

原文:https://www . geesforgeks . org/map-and-flat map-in-Java-stream/

在 Java 中,Stream 接口有map()flatmap() 方法,两者都有中间流操作,并返回另一个流作为方法输出。函数 map()和 flatMap 都用于转换和映射操作。map()函数为一个输入值产生一个输出,而 flatMap()函数为每个输入值产生任意数量的值作为输出(即零或大于零)。

映射()的语法表示为:

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

平面图()的语法表示为:-

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

其中 R 是新流的元素类型。流是一个接口,T 是流元素的类型,映射器是一个无状态函数,应用于每个元素,函数返回新的流。

*map()* 可以用于我们必须将特定集合的元素映射到某个函数,然后我们需要返回包含更新结果的流。

*示例:*将列表的所有元素乘以 3,返回更新后的列表。

*flatMap()* 可以用于我们必须展平或变换字符串的地方,因为我们无法使用 Map()展平字符串。

*示例:*获取字符串列表中所有字符串的第一个字符,并以流的形式返回结果。

*map()和 flatmap()* 的区别

| 地图() | flatMap() | | --- | --- | | 传递给 map()操作的函数为单个输入返回单个值。 | 传递给 flatmap()操作的函数返回任意数量的值作为输出。 | | 一对一映射发生在 map()中。 | flatMap()中出现过多映射。 | | 仅执行映射。 | 执行映射和展平。 | | 产生价值流。 | 产生价值流。 | | map()仅用于转换。 | flatMap()用于转换和映射。 |

下面是使用 map()函数的 Java 程序:

Java 语言(一种计算机语言,尤用于创建网站)

// Java program using map() function
import java.io.*;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
class GFG {

    public static void main(String[] args)
    {
        // making the array list object
        ArrayList<String> fruit = new ArrayList<>();
        fruit.add("Apple");
        fruit.add("mango");
        fruit.add("pineapple");
        fruit.add("kiwi");
        System.out.println("List of fruit-" + fruit);

        // lets use map() to convert list of fruit
        List list = fruit.stream()
                        .map(s -> s.length())
                        .collect(Collectors.toList());
        System.out.println("List generated by map-" + list);
    }
}

*输出:*

List of fruit-[Apple, mango, pineapple, kiwi]
List generated by map-[5, 5, 9, 4]

下面是使用 flatMap()的 Java 程序:

Java 语言(一种计算机语言,尤用于创建网站)

// Java program using flatMap() function
import java.io.*;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
class GFG {
    public static void main(String[] args)
    {
        // making the arraylist object of List of Integer
        List<List<Integer> > number = new ArrayList<>();

        // adding the elements to number arraylist
        number.add(Arrays.asList(1, 2));
        number.add(Arrays.asList(3, 4));
        number.add(Arrays.asList(5, 6));
        number.add(Arrays.asList(7, 8));

        System.out.println("List of list-" + number);

        // using flatmap() to flatten this list
        List<Integer> flatList
            = number.stream()
                  .flatMap(list -> list.stream())
                  .collect(Collectors.toList());

        // printing the list
        System.out.println("List generate by flatMap-"
                           + flatList);
    }
}

**Output

```java List of list-[[1, 2], [3, 4], [5, 6], [7, 8]] List generate by flatMap-[1, 2, 3, 4, 5, 6, 7, 8]

```**