博客
关于我
Stream API:filter、map和flatMap 的用法
阅读量:795 次
发布时间:2023-02-26

本文共 1506 字,大约阅读时间需要 5 分钟。

Java Streams中的filter、map和flatMap方法

在Java的 Streams处理中,filter、map和flatMap是三种常用且强大的方法,它们在数据处理流程中发挥着重要作用。本文将分别介绍这三种方法的特点及使用场景。


1. filter方法

filter方法的核心作用是对流中的元素进行过滤,只保留满足特定条件的元素。该方法的参数是一个Predicate

类型的函数,该函数接收一个T类型的对象,并返回boolean值。例如:

List
words = ...;
words.stream()
.filter(word -> word.length() > 12)
.collect(Collectors.toList());

上述代码将从words流中筛选出长度大于12的单词。需要注意的是,Predicate接口可以通过方法引用或lambda表达式来实现。通过filter方法,我们可以高效地对流数据进行初步筛选,减少后续处理的负担。


2. map方法

map方法的主要功能是对流中的元素进行转换。它接收一个函数,该函数将流中的元素从一个类型转换为另一个类型。例如:

List
words = ...;
words.stream()
.map(String::toLowerCase)
.collect(Collectors.toList());

上述代码将将所有单词转换为小写形式。map方法的一个显著优势在于,它能够将流中的元素转换为多种不同的形式,例如将字符串转换为数字或日期等。在实际应用中,map方法常常与其他方法结合使用,例如与flatMap一起使用时,可以将流中的元素拆分成多个子流。


3. flatMap方法

flatMap方法与map方法类似,但它的输出是多个流的Flatten操作。它的主要用途是将流中的元素拆分成多个子流,并将这些子流合并成一个单独的流。例如:

List
words = ...;
words.stream()
.flatMap(word -> Arrays.asList(word.split("")))
.collect(Collectors.toList());

上述代码将将每个单词拆分成一个或多个子单词,然后将所有子单词合并成一个单一的流。例如,对于单词["hello", "world"],flatMap方法将返回一个流["h", "e", "l", "l", "o", "w", "o", "r", "l", "d"]。

需要注意的是,flatMap方法的输出类型是List

,而map方法的输出类型是Stream
。因此,在实际使用中,需要根据具体需求选择合适的方法。


map与flatMap的区别

通过上述示例可以看出,map和flatMap方法在功能上有明显的区别:

  • map方法:返回的是一个新的流,包含转换后的结果。
  • flatMap方法:返回的是一个多级流的Flatten结果。

例如,假设输入流是["you", "name"]:

  • 使用map方法:

    .map(String::toLowerCase)

    返回的流是["you", "name"]。

  • 使用flatMap方法:

    .flatMap(word -> Arrays.asList(word.split("")))

    返回的流是["y", "o", "u", "r", "n", "a", "m", "e"]。

这两种方法各有优劣,具体选择取决于实际需求。

转载地址:http://ggpfk.baihongyu.com/

你可能感兴趣的文章
openlayers 入门教程(八):Geoms 篇
查看>>
openlayers 入门教程(十五):与 canvas、echart,turf 等交互
查看>>
openlayers 入门教程(四):layers 篇
查看>>
Openlayers中使用Cluster实现点位元素重合时动态聚合与取消聚合
查看>>
Openlayers中使用Cluster实现缩放地图时图层聚合与取消聚合
查看>>
Openlayers中使用Image的rotation实现车辆定位导航带转角(判断车辆图片旋转角度)
查看>>
Openlayers中点击地图获取坐标并输出
查看>>
Openlayers中设置定时绘制和清理直线图层
查看>>
Openlayers图文版实战,vue项目从0到1做基础配置
查看>>
Openlayers实战:modifystart、modifyend互动示例
查看>>
Openlayers实战:绘制图形,导出geojson文件
查看>>
Openlayers实战:绘制图形,导出KML文件
查看>>
Openlayers实战:绘制多边形,导出CSV文件
查看>>
Openlayers实战:输入WKT数据,输出GML、Polyline、GeoJSON格式数据
查看>>
Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
查看>>
Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
查看>>
Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
查看>>
Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
查看>>
Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
查看>>
Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
查看>>