for里面嵌套if_以后要是再写for循环,我就捶自己

请 听 题

给定一个字符串元素列表,如下所示:

6ccd1009dcdcf5093561f23339966294.png

里面有数字型字符串,有字母型字符串;字符串里有大写,也有小写;字符串长度也有长有短

现在要写代码完成一个小功能

我想找出所有 长度>=5的字符串,并且忽略大小写、去除重复字符串,然后按字母排序,最后用“爱心❤”连接成一个字符串输出!

哟,就这点需求能难倒我?三分钟之类必搞定!

71a210bfe675c69f1edb0e8fcfb3d135.png

首先我写一个函数,判断输入字符串到底是字母还是数字

85dcabce9086f46555f51901f2c33a53.png

接下来我一顿SAO操作:

4177b1a509abb1a5064d181533e31432.png

最后输出结果为:

3c41237154621ef35d88fe8c1391dc21.png

啪啪啪,打脸

2ec6411f1700272fac69f94052793c7c.gif

我原以为这个功能我只需要3分钟即可写完并运行出结果,而实际对时我发现我居然花了5分钟。。。

而且我现在是一看到for循环遍历,我头就痛,上面代码倒还好,假如列表层级变复杂,俄罗斯套娃式的for循环 谁扛得住。

496b85316878ee31f58acf70f6840611.png

函数式编程,爽!

没错,自Java 8开始,引入了函数式编程范式,这对于咱这种底层劳动密集型码畜来说,简直解放了双手,代码几乎少写一半,从此真正实现编码5分钟,划水2小时

0c5dece99cb5c915a07596a484bd90bf.png

针对上面的作业,用Java 8的 Stream流式操作,仅需一行代码就可以搞定,for循环啥的统统灰飞烟灭。

1eea2f413398acd98d61e3646ae58d74.png

怎么样,这代码信噪比可以吧

d10dfcd864572b5052cd87bf3d97a75b.png

言归正传

上面其实已经通过举栗的方式阐述了Java 8函数式编程范式:Stream流 的优雅和强大,尤其在处理集合时,几本一步到位,嘎嘣脆。

当然Stream也仅仅只是Java 8函数式编程接口的一个而已,除了Stream接口,还有其他非常强大的函数式编程接口,比如:

  • Consumer接口
  • Optional接口
  • Function接口

每个接口我们都来举一个好理解的例子,看完保证你难以拒绝!

1b035ba6abbc7a87606efe0ba797da8a.png

一、Consumer接口

顾名思义,它是“消费者的含义”,接受参数而不返回值,举个最最常见的栗子:

平时我们打印字符串,本质也是接受一个参数并打印出来,我们一般想都不想,会这样写:

411e087b1abae93b1d36496743b33ab5.png

一旦你用了 Consumer之后,总感觉更加优雅一些

55b2c1cb2b7b7df41ddc73acf8ae103d.png

而且 Consumer还可以用联用,达到多重处理的效果,比如:

06f64e960b64ae9d74cfb38238c383ca.png

当然本例只是打印字符串,比较简单,若业务更加复杂, Consumer复用带来的便利性还是不小的。

二、Function接口

Function接口代表的含义是“函数”,其实和上面的 Consumer有点像,不过 Function既有输入,也有输出,使用更加灵活,举例:

比如我想对一个整数先乘以 2,再计算平方值

bee51586124e1020d698d1ab7039f70d.png

别的不说,这个炫技操作还是可以的!

a3d233e5e7276e1e26bdacc5e23aa214.gif

三、Optional接口

Optional本质是个容器,你可以将你的变量交由它进行封装,这样我们就不用显式对原变量进行 null值检测,防止出现各种空指针异常。举例:

我们想写一个获取学生某个课程考试分数的函数:getScore()

30622fb36114e250e30c5b9ec7564757.png

这样写倒不是不可以,但我们作为一个“严谨且良心的”后端工程师,这么多嵌套的 if 判空多少有点扎眼!

为此我们必须引入 Optional:

cbccf60d64702e32bfb76b388d9cb297.png

漂亮!嵌套的if/else判空灰飞烟灭!

c493b7430c81807328a383c6a6bb4e98.png

立个Flag (滑稽)

好啦,本文就抛砖引玉到这里了,大家可以在自己的代码中用函数式编程范式尝试做小规模重构,相信用起来还是非常甜蜜的。

立个Flag,以后写代码,估计我会很少使用for循环了(滑稽),Stream流用起来简直不要太爽啊。。。

58e7e95f1315cf671951d9115f7e4afd.png

开个玩笑,函数式编程范式虽然用起来很爽,但也最好根据实际业务情况来决定是否使用,毕竟大面积的动态范式代码还是挺难看懂和维护的,总之就一句话,理性使用,不要滥用

对了,在这里说一下,我目前是在职Java开发,如果你现在正在学习Java,了解Java,渴望成为一名合格的Java开发工程师,在入门学习Java的过程当中缺乏基础入门的视频教程,可以关注并私信我:01。获取。我这里有最新的Java基础全套视频教程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值