评论

收藏

[PHP] 00 后 Dromara 成员带你学 Java Lambda 函数编程

开发技术 开发技术 发布于:2022-08-26 13:43 | 阅读数:311 | 评论:0

我的名字叫阿超 年龄 21 岁 家在灶王镇西南部的别墅区区内 未婚 我在一家普通公司做 Java 开发 每天最晚也会在八点前回家 不抽烟 偶尔沾点酒 晚上十二点上床 保证睡足八个小时 睡前写一篇博客 再做二十分钟仰卧起坐暖身 然后再睡觉 基本能熟睡到天亮 像婴儿一样不留下任何疲劳和压力 就这样迎来第二天的早晨 医生都说我很正常。

阿超是新晋 Dromara 开源组织成员、Hutool Committer

目前技术栈包括不限于 JavaJavaScriptTypeScriptReactVuePython

热爱做开源,给 Sa-TokenEasy-ES 等项目都贡献过代码

正文

距离我加入 hutool-commiter 已经有一段时间了,想起曾经封装过的一个类 Opt,就是使用 lambda 解决空指针问题。按照惯例,先介绍下 dromara 组织下的项目 hutool

DSC0000.jpg

Hutool 是一个小而全的 Java 工具类库,通过静态方法封装,降低相关 API 的学习成本,提高工作效率,使 Java 拥有函数式语言般的优雅,让 Java 语言也可以 “甜甜的”。

这个类 Opt 的灵感来源是对 jdk 内置的 java.util.Optional 的拓展,在一些细节方面进行了简化处理​​​​
// 之前:String username;if (user != null && user.getUsername() != null) {  username = user.getUsername();} else {  username = "no name";}// 现在:String username = Opt.ofNullable(user).map(User::getUsername).orElse("no name");
关于 Opt Optional 的差异我们先按下不表

下面主要是通过其介绍 lambda 的使用

快速上手

依靠 idea 编译器的提示进行快速上手

下方是判断 user 是否为空,不为空通过 User#getSchool() 获取学校名的操作

例如此处我写到这里
User user = new User();// idea提示下方参数,果没显示,光标放到括号里按ctrl+p主动呼出           |Function<? super User,?> mapper|Opt.ofNullable(user).map()
这里 idea 为我们提示了参数类型,可这个 Function 我也不知道它是个什么

实际上,我们 new 它一个就好了
Opt.ofNullable(user).map(new Fun)              |Function<User, Object>{...} (java.util.function)   |  <-戳我              |Func<P,R> cn.hutool.core.lang.func         |
这里 idea 提示了剩下的代码,我们选 Function 就行了,接下来如下:
Opt.ofNullable(user).map(new Function<User, Object>() {})
此处开始编译报错了,不要着急,我们这里根据具体操作选取返回值

例如这里是想判断 user 是否为空,不为空时调用 getSchool,从而获取其中的返回值 String 类型的 school

我们就如下写法,将第二个泛型,也就是象征返回值的泛型改为 String
Opt.ofNullable(user).map(new Function<User, String>() {})
然后这里红线提示了,我们就使用 idea 的修复所有,默认快捷键 alt+ 回车​​​​​​​

Opt.ofNullable(user).map(new Function<User, String>() {})                                                | 


DSC0001.jpg