在Java,Stream 接口具有 map() 和 flatmap() 方法都具有中间流操作并返回另一个流作为方法输出。函数 map() 和 flatMap 都用于转换和映射操作。 map()函数为一个输入值生成一个输出,而 flatMap()函数为每个输入值生成任意数量的值作为输出(即零或大于零)。
map() 的语法表示为:
Stream map(Function super T, ? extends R> mapper)
flatMap() 的语法表示为:-
Stream flatMap(Function super T, ? extends Stream extends R>> mapper)
其中 R 是新流的元素类型。流是一个接口,T 是流元素的类型,映射器是一个无状态函数,应用于每个元素,该函数返回新的流。
map()可以用于我们必须将特定集合的元素映射到某个函数,然后我们需要返回包含更新结果的流。
示例:将列表中的所有元素乘以 3 并返回更新后的列表。
flatMap()可用于我们必须展平或转换字符串,因为我们无法使用 map() 展平我们的字符串。
示例:获取字符串列表中所有字符串的第一个字符,并以流的形式返回结果。
map() 和 flatmap() 的区别
map() | flatMap() |
---|---|
The function passed to map() operation returns a single value for a single input. | The function you pass to flatmap() operation returns an arbitrary number of values as the output. |
One-to-one mapping occurs in map(). | One too many mapping occurs in flatMap(). |
Only perform the mapping. | Perform mapping as well as flattening. |
Produce a stream of value. | Produce a stream of stream value. |
map() is used only for transformation. | flatMap() is used both for transformation and mapping. |
以下是使用 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 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);
}
}
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 > 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 flatList
= number.stream()
.flatMap(list -> list.stream())
.collect(Collectors.toList());
// printing the list
System.out.println("List generate by flatMap-"
+ flatList);
}
}
输出:
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 > 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 flatList
= number.stream()
.flatMap(list -> list.stream())
.collect(Collectors.toList());
// printing the list
System.out.println("List generate by flatMap-"
+ flatList);
}
}
输出
List of list-[[1, 2], [3, 4], [5, 6], [7, 8]]
List generate by flatMap-[1, 2, 3, 4, 5, 6, 7, 8]