你在使用Lambda表达式吗?| 文末互动送书

“Java 8 的函数式编程都在哪儿用啊?”

前几天,当有人向我提出这个问题的时候,我还真是愣了一下,是啊,2014年 Java8 已经发布了,函数式编程的特性是一个重头戏,有一段时间挺火热的,网上的文章也铺天盖地,可是我在工作和学习中用得并不多啊。

Java 的每一个版本都会引入不少新特性,同时尽可能地向后兼容,这一点确实挺棒的。

比如JDK 1.1 中引入了JDBC, Java Bean 。

JDK1.2(J2SE 1.2 )中的JIT Complier 。

JDK1.4  (J2SE 1.4) 中的 非阻塞IO。

JDK 5 (宣传需要,命名改变,从1.4 直接变为5) 中的泛型和注解,强化的for each循环。

JDK 8 增加了函数式编程。

JDK 9 增加了模块化支持。

......

这些版本中我觉得对程序员日常coding 影响最大的可能就是 JDK 5。

泛型增强了类型安全,每次创建一个集合变量时,如果不声明类型简直就觉得难受。

List<Employee> list = new ArrayList<Employee>();

自定义注解则可以给类、方法、字段添加了元数据,这一点点的元数据就让Spring之类的框架大显身手。


@Controller , @Autowired, @RequestMapping ......极大地简化了程序的配置,让程序容易编写,容易阅读,解放了生产力。

增强的for each 让人用起来也非常舒服:


List<Employee> list= ......

for(Employee e: list){

    //do something.

}

这些JDK的特性改变了编程的习惯,提升了程序员的生产力,是程序员的福音,所以大家都喜欢使用。

(参见《Java帝国之泛型》、《Java注解是怎么上位的》)

回到Java 8 的函数式编程,Lambda表达式,这个特性的加入对于日常coding来说似乎不是一个必须品,更重要的是要想写出好的Lambda表达式,思维能力必须得有一定程度的提升和转换才可以。

程序员必须得能意识到Java是一门静态类型的语言,一个变量必须有类型,并且不能改变。 所以Java中的Lambda表达式也必须有个类型(接口)才行。


(参见:《Java 的Lambda表达式有什么用?》)

除此之外,思维也需要从描述“how”变成描述 “what”, 从过程式变成声明式。

这两个障碍在实际编程中表现就是: 


Lambda表达式不容易理解,写起来不容易,也不好调试。“还不如用我那简单的for each 循环!”  特别是有些人为了炫技增加了阅读的难度。

我自己在工作学习中偶尔在两个地方使用Lambda表达式, 一个是对集合做遍历的时候,用了一点儿filter和map ; 还有就是用Lambda表达式来替换匿名类,这个用起来比较爽。

《Java 8函数式编程》一书中提到了并行编程,利用stream对象的parallel方法让其拥有并行操作的能力,可以充分利用CPU的多核能力。 还有一节讲的是“使用Lambda表达式实现领域特定语言”。

我不太清楚有多少人在实战中使用类似的功能,在这里做个有奖调查,大家可以通过留言聊一聊你在工作中是怎么使用Java 8的Lambda表达式的, 我会选择三个人,送出三本签名版的《码农翻身》


640?wx_fmt=png

码农翻身,用故事讲解技术本质, 更多精彩文章,请移步《码农翻身三年文章精华

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值