问题

我一直在查看即将发布的Java update,即:Java 8 or JDK 8。是的,我很不耐烦,有很多新东西,但是,有一些我不明白的东西,一些简单的代码:

final Streamstream = Stream.of(1,2,3,4,5,6,7,8,9,10);

stream.flatMap();

javadoc是

public Stream flatMap(函数> mapper)返回一个流,该流包含将此流的每个元素替换为生成的映射流的内容的结果通过将提供的映射函数应用于每个元素。每个映射的流在其内容放入此流后关闭。 (如果映射的流为空,则使用空流。)这是一个中间操作。

如果有人创建了一些关于flatMap的简单实际示例,如何在以前的java版本Java[6,7]中编写代码以及如何使用Java 8编写相同的例程,我将不胜感激。

#1 热门回答(147 赞)

flatMapaStream没有任何意义,就像你在问题中显示的Stream一样。

但是,如果你有aStream>那么它会有意义,你可以这样做:

Stream> integerListStream = Stream.of(

Arrays.asList(1, 2),

Arrays.asList(3, 4),

Arrays.asList(5)

);

Stream integerStream = integerListStream .flatMap(Collection::stream);

integerStream.forEach(System.out::println);

哪个会打印:

1

2

3

4

5

要在Java 8之前执行此操作,你只需要一个循环:

List> integerLists = Arrays.asList(

Arrays.asList(1, 2),

Arrays.asList(3, 4),

Arrays.asList(5)

)

List flattened = new ArrayList<>();

for (List integerList : integerLists)

{

flattened.addAll(integerList);

}

for (Integer i : flattened)

{

System.out.println(i);

}

#2 热门回答(105 赞)

##编写例子

想象一下,你想要创建以下序列:1,2,3,3,3,3,4,4,4等等(换句话说:1x1,2x2,3x3等)

WithflatMapit可能看起来像:

IntStream sequence = IntStream.rangeClosed(1, 4)

.flatMap(i -> IntStream.iterate(i, identity()).limit(i));

sequence.forEach(System.out::println);

哪里:

IntStream.rangeClosed(1,4)创建一个从1到4(包括1和4)的int流

IntStream.iterate(i,identity())。limit(i)创建一个int i的长度为i的流 - 所以应用于i = 4它创建一个流:4,4,4,4

flatMap"展平"流并将其"连接"到原始流

使用Java <8,你将需要两个嵌套循环:

List list = new ArrayList<>();

for (int i = 1; i <= 4; i++) {

for (int j = 0; j < i; j++) {

list.add(i);

}

}

##真实世界的例子

假设我有aList其中eachTimeSeries基本上是aMap。我想得到一个所有日期的列表,其中至少有一个时间序列具有值.flatMap来救援:

list.stream().parallel()

.flatMap(ts -> ts.dates().stream()) // for each TS, stream dates and flatmap

.distinct() // remove duplicates

.sorted() // sort ascending

.collect(toList());

它不仅可读,而且如果你突然需要处理100k元素,只需添加parallel()即可在不编写任何并发代码的情况下提高性能。

#3 热门回答(16 赞)

从短语列表中提取排序ASC的唯一单词:

List phrases = Arrays.asList(

"sporadic perjury",

"confounded skimming",

"incumbent jailer",

"confounded jailer");

List uniqueWords = phrases

.stream()

.flatMap(phrase -> Stream.of(phrase.split(" +")))

.distinct()

.sorted()

.collect(Collectors.toList());

System.out.println("Unique words: " + uniqueWords);

......和输出:

Unique words: [confounded, incumbent, jailer, perjury, skimming, sporadic]

java7 flatmap_Java 8 Streams FlatMap方法示例相关推荐

  1. java7 flatmap_Java 8多级flatMap最佳实现

    我有这两个代码示例: 代码A: Stream aStream = firstLevelList.stream() .flatMap(firstLevelElement -> firstLevel ...

  2. java flatmap_Java 8 Steam API map和flatMap方法使用详解

    java 8 stream api 中有两个方法map和flatMap非常实用,应用场景也非常广泛,能极大提升编程效率.下面我们详细介绍一下这两个方法的用法. map方法 我们来看个示例:把一个整数列 ...

  3. java方法示例注释 @_Java 8中的功能接口是什么? @功能注释和示例

    java方法示例注释 @ 函数接口是Java 8最重要的概念之一,实际上为lambda表达式提供了动力,但是许多开发人员没有首先了解函数接口在Java 8中的作用就花了很多精力来理解它,并花时间学习l ...

  4. java steam说明_Java 8 Steam API map和flatMap方法使用详解

    一对多的提取内容用flatmap,一对一用map java 8 stream api 中有两个方法map和flatMap非常实用,应用场景也非常广泛,能极大提升编程效率.下面我们详细介绍一下这两个方法 ...

  5. pyspark实践之 map/flatMap应用示例

    1.map用法示例 PySpark map() Transformation - Spark By {Examples} 1.1 比较map和foreach的功能异同 PySpark foreach( ...

  6. 【Java 8 新特性】Java 8 flatMap 使用示例

    文章目录 1.在List中使用`Stream.flatMap`方法 2.在List列表中使用`Stream.flatMap`方法 3.在Array中使用`Stream.flatMap`方法 4.在对象 ...

  7. Java 8 Steam API map和flatMap方法使用详解

    java 8 stream api 中有两个方法map和flatMap非常实用,应用场景也非常广泛,能极大提升编程效率.下面我们详细介绍一下这两个方法的用法. map方法 我们来看个示例:把一个整数列 ...

  8. 基于python的证件照_20行代码教你用python给证件照换底色的方法示例

    1.图片来源 该图片来源于百度图片,如果侵权,请联系我删除!图片仅用于知识交流. 2.读取图片并显示 imread():读取图片: imshow():展示图片: waitkey():设置窗口等待,如果 ...

  9. stream map方法_Java Stream中map和flatMap方法

    最近看到一篇讲stream语法的文章,学习Java中map()和flatMap()方法之间的区别. 虽然看起来这两种方法都做同样的事情,都是做的映射操作,但实际上差之毫厘谬以千里. 通过演示Demo中 ...

最新文章

  1. “重构”黑洞:26岁MIT研究生的新算法 | 人物志
  2. 【解题报告】【HDOJ1233】【最小生成树】还是畅通工程
  3. ruby简单的基础 4
  4. vs2015 linux jni,使用Visual C++ 跨平台移动技术调试JNI Android 应用程序
  5. leetcood学习笔记-111-二叉树的最小深度
  6. format 参数说明
  7. ASP.NET 2.0中使用自定义provider (2)
  8. python读取多通道信号中的一个通道_RFID多通道读写器的具体应用
  9. C++Primer 学习笔记之关联容器
  10. canopen和1939区别_现场总线SAE J1939 与CANopen 通讯
  11. 金橙子dll使用说明
  12. 交换机和路由器的区别计算机网络,交换机和路由器的区别,教您交换机和路由器的区别...
  13. java学习笔记(10) 第10 章(上) - 面向对象编程(高级部分)
  14. 经典算法研究系列:八、再谈启发式搜索算法
  15. 基于javaweb+Swing+MySQL火车票售票管理系统
  16. 立创eda学习笔记二十:查找相似对象和批量修改
  17. cef异常处理_cefSharp在XP下使得程序崩溃记录
  18. linux服务器使用搜狗输入法,linux下使用搜狗输入法皮肤(.ssf)(示例代码)
  19. (贪心)CF1428E. Carrots for Rabbits
  20. 如何禁止PC端微信自动接收视频附件(不适用于3.7.0.29以后版本)

热门文章

  1. 【开源项目】股票配资系统开发与设计(二)
  2. xadmin与mysql数据库_django学习之xadmin后台管理部署
  3. 还有20小时!神泣龙之反击上线倒计时
  4. Mysql能删了重装吗_【MySQL】干净删除MySQL,无报错重装
  5. 【跨域】如何解决跨域问题
  6. How to identify – and avoid – travel photo ‘porn’
  7. 微信小程序转发传值及自定义图片
  8. C#连接数据库时Appsettings 与connectionStrings的区别
  9. RFC系列协议-相关说明
  10. php和体感开发,关于体感的10篇文章推荐