Java中流处理地图与flatMap时有什么区别

  介绍

这篇文章将为大家详细讲解有关Java中流处理地图与flatMap时有什么区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

共同点和区别

首先看一下源代码

,, & lt; R>, Stream,地图(Function<?, super  T, ?, extends  R>, mapper);   ,,& lt; R>, Stream, flatMap (Function<?, super  T, ?, extends  Stream<?, extends  R>祝辞,mapper);

共同点

<李>

都是依赖流进行转换,结合λ的入参和返回值,将一个类型依据程序逻辑转换成另一种类型。

<李>

最后结果返回都还是一个流,还可以对其进行继续的流式处理或者进行收集。

区别

<李>

方法参数不同,第一个参数是一样的,但是第二个不一样,对于地图第二个参数没啥要求,但是使用flatMap时,第二个参数还得用流来接收。

<李>

所以flatMap多用于多对多,一对多,也就是地图是将一个数据流中的一个数据节点,映射成另外一个数据节点,而flatMap是将一个数据流中的一个数据节点映射成另外一个数据流,这个另外的数据流可以是一个数据节点也可以是多个数据节点。

<李>

flatMap既可以单一转换也可以一对多/多对多转换,flatMap要求返回可见,因此可以再内部进行从/的再次事件分发,一一取出单一对象(转换对象的能力不同)

使用案例

比如我们使用地图将一个每对象映射成一个字符串对象

,, static  class  Per  {   ,,,public  String 名称;   ,,,public  int 年龄;      ,,,public 每(名称、String  int 年龄),{   ,,,,,this.name =,名称;   ,,,,,this.age =,年龄;   ,,,}      ,,,public  String  getName (), {   ,,,,,return 名称;   ,,,}      ,,,public  void  setName (String 名称),{   ,,,,,this.name =,名称;   ,,,}      ,,,public  int  getAge (), {   ,,,,,return 年龄;   ,,,}      ,,,public  void  setAge (int 年龄),{   ,,,,,this.age =,年龄;   ,,,}      ,,@Override   ,,,public  String  toString (), {   ,,,,,return “/{“+   ,,,,,,,,,“name=& # 39;“, +, name  +, & # 39; \ & # 39; & # 39; +   ,,,,,,,,,,,,岁=?+,age  +   ,,,,,,,,,& # 39;}& # 39;;   ,,,}   ,,}      public 才能;static  void  main (String [], args), {   ,,,List, list =, new  ArrayList<在();   ,,,list.add (new 每(“listen",, 22));   ,,,list.add (new 每(“bike",, 24));   ,,,list.add (new 每(“milk",, 27));      ,,,List, collect =, list.stream () . map (/:: toString) .collect (Collectors.toList ());      ,,,System.out.println(列表);   ,,,System.out.println(“——产生绯闻);   ,,,System.out.println(收集);      以前,,}

一对一可以实现,那我们该需求,假设一个每个人有多个孩子,我们想获取这多个孩子,使用地图可以实现吗?比如下面代码。

,, static  class  Child  {   ,,,public  String 名称;   ,,,public  int 年龄;      ,,,public 孩子(名称、String  int 年龄),{   ,,,,,this.name =,名称;   ,,,,,this.age =,年龄;   ,,,}   ,,,,,,@Override   ,,,public  String  toString (), {   ,,,,,return “孩子{“+   ,,,,,,,,,“name=& # 39;“, +, name  +, & # 39; \ & # 39; & # 39; +   ,,,,,,,,,,,,岁=?+,age  +   ,,,,,,,,,& # 39;}& # 39;;   ,,,}   ,,}      static 才能class  Per  {   ,,,public  String 名称;   ,,,public  int 年龄;   ,,,public 孩子[],孩子;      ,,,public 每(名称、String  int 年龄),{   ,,,,,this.name =,名称;   ,,,,,this.age =,年龄;   ,,,}      ,,,public 孩子[],getChildren (), {   ,,,,,return 儿童;   ,,,}      null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

Java中流处理地图与flatMap时有什么区别