在Java中,Stream接口有map()
和flatmap()
方法,两者都有中间流操作,并返回另一个流作为方法输出。map()
和flatMap()
都用于转换和映射操作。map()
函数为一个输入值产生一个输出,而flatMap()
函数为每个输入值产生任意数量的值作为输出(即零或多于零)。
map()
的语法表示为:
<R> Stream<R> map(Function<? super T, ? extends R> mapper)
flatMap()
的语法表示为:
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper)
其中R
是新流的元素类型。流是一个接口,T
是流元素的类型,mapper
是一个无状态函数,应用于每个元素,该函数返回新的流。
map()
可以用在必须将一个特定集合的元素映射到某个函数中,然后我们需要返回包含更新结果的流。
例子: 将列表中的所有元素乘以3并返回更新的列表。
flatMap()
可以用在必须对字符串进行扁平化或转换的地方,因为不能用map()来扁平化字符串。
例子: 获取字符串列表中所有字符串的第一个字符并以流的形式返回结果。
map()和flatmap()的区别
map() | flatMap() |
---|---|
传递给map()操作的函数对单一输入返回一个单一的值。 | 传给flatmap()操作的函数返回任意数量的值作为输出。 |
一对一映射发生在map()中。 | 一对多的映射发生在flatMap()中。 |
只执行映射。 | 执行映射以及扁平化。 |
生成一个值流。 | 生成一个流值的流。 |
map()只用于转换。 | flatMap()同时用于转换和映射。 |
以下是使用map()函数的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 YiibaiDemo {
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 program using flatMap() function
import java.io.*;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
class YiibaiDemo {
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);
}
}
运行结果:
List of list-[[1, 2], [3, 4], [5, 6], [7, 8]]
List generate by flatMap-[1, 2, 3, 4, 5, 6, 7, 8]
Java流中map()和flatMap()的区别
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:Java流中map()和flatMap()的区别
本文链接:https://www.vsdiffer.com/vs/difference-between-map-and-flatmap-in-java-stream.html
免责声明:以上内容仅代表 个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。