全面吃透JAVA Stream流操作,让代码更加的优雅

🚀 优质资源分享 🚀

学习路线指引(点击解锁) 知识定位 人群定位
🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

全面吃透JAVA Stream流操作,让代码更加的优雅
☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝☝

在JAVA中,涉及到对数组Collection等集合类中的元素进行操作的时候,通常会通过循环的方式进行逐个处理,或者使用Stream的方式进行处理。

例如,现在有这么一个需求:

从给定句子中返回单词长度大于5的单词列表,按长度倒序输出,最多返回3个

JAVA7及之前的代码中,我们会可以照如下的方式进行实现:


/**
 * 【常规方式】
 * 从给定句子中返回单词长度大于5的单词列表,按长度倒序输出,最多返回3个
 *
 * @param sentence 给定的句子,约定非空,且单词之间仅由一个空格分隔
 * @return 倒序输出符合条件的单词列表
 */
public List sortGetTop3LongWords(@NotNull String sentence) {
 // 先切割句子,获取具体的单词信息
 String[] words = sentence.split(" ");
 List wordList = new ArrayList<>();
 // 循环判断单词的长度,先过滤出符合长度要求的单词
 for (String word : words) {
 if (word.length() > 5) {
 wordList.add(word);
 }
 }
 // 对符合条件的列表按照长度进行排序
 wordList.sort((o1, o2) -> o2.length() - o1.length());
 // 判断list结果长度,如果大于3则截取前三个数据的子list返回
 if (wordList.size() > 3) {
 wordList = wordList.subList(0, 3);
 }
 return wordList;
}


JAVA8及之后的版本中,借助Stream流,我们可以更加优雅的写出如下代码:


/**
 * 【Stream方式】
 * 从给定句子中返回单词长度大于5的单词列表,按长度倒序输出,最多返回3个
 *
 * @param sentence 给定的句子,约定非空,且单词之间仅由一个空格分隔
 * @return 倒序输出符合条件的单词列表
 */
public List sortGetTop3LongWordsByStream(@NotNull String sentence) {
 return Arrays.stream(sentence.split(" "))
 .filter(word -> word.length() > 5)
 .sorted((o1, o2) -> o2.length() - o1.length())
 .limit(3)
 .collect(Collectors.toList());
}


直观感受上,Stream的实现方式代码更加简洁、一气呵成。很多的同学在代码中也经常使用Stream流,但是对Stream流的认知往往也是仅限于会一些简单的filtermapcollect等操作,但JAVA的Stream可以适用的场景与能力远不止这些。

那么问题来了:Stream相较于传统的foreach的方式处理stream,到底有啥优势

这里我们可以先搁置这个问题,先整体全面的了解下Stream,然后再来讨论下这个问题。

笔者结合在团队中多年的代码检视遇到的情况,结合平时项目编码实践经验,对Stream的核心要点与易混淆用法典型使用场景等进行了详细的梳理总结,希望可以帮助大家对Stream有个更全面的认知,也可以更加高效的应用到项目开发中去。

Stream初相识

概括讲,可以将Stream流操作分为3种类型

  • 创建Stream
  • Stream中间处理
  • 终止Steam

每个Stream管道操作类型都包含若干API方法,先列举下各个API方法的功能介绍。

  • 开始管道

主要负责新建一个Stream流,或者基于现有的数组、List、Set、Map等集合类型对象创建出新的Stream流。

API 功能说明
stream() 创建出一个新的stream串行流对象
parallelStream() 创建出一个可并行执行的stream流对象
Stream.of() 通过给定的一系列元素创建一个新的Stream串行流对象

  • 中间管道

负责对Stream进行处理操作,并返回一个新的Stream对象,中间管道操作可以进行叠加

API 功能说明
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值