java8笔记:Lambda表达式一
先说下一个简单筛选编码的变化过程。
首先我们有一个苹果集合:
1、需要筛选出里面绿色属性的苹果。
比较简单直接,直接一个比较,返回满足要求的集合
2、现在需要一个红色的苹果
那么这时候可以同第一点一样增加一个方法直接过滤红色的苹果,但是为了能满足其他的颜色筛选,这时候我们最好将颜色当作参数传递,ok,这样一来我们就可以满足任何颜色的筛选需求了。
3、现在需要筛选重量大于10的苹果
这时候我们只能增加一个方法去筛选重量,同时为了满足其他重量的筛选,我们得弄一个和第二点类似的方法
这时候想想这两个方法似乎可以放在一起公用,ok,那么我们调整一下代码,既可以筛选颜色,同时也满足重量的筛选
这里省略xxx其他筛选需求,这时候看代码似乎不是那么美观优雅,那么我们来用另外一种方式,让它看起来简洁明了
第一步:定义个接口
第二步:每一种需求写一个对应的实现类
这样一来我们的每一种筛选需求都会被单独封装在对应的实现类中,那么我们就只管在使用的时候明确需要的过滤实现类就好。只需要一个过滤方法就可以满足所有的过滤需求
过滤筛选方法
在使用的时候直接传递我们需要的过滤实现类
当然这里还可以使用匿名类来做过滤
OK!走到这里,我们会发现我们的过滤筛选方法的参数是很有意思的,第一参数是我们需要筛选的集合,那么第二个参数是我们的筛选规则实现类,也就是我们现在已经在做一件把一种筛选行为当作参数来传递(厉害了)
但是会发现这种做法也挺累的,无论筛选规则多简单,每个都得建一个对应的实现类。
至于使用匿名类的方式有几点不友好
其一:这个代码来比较笨重,因为它占用很多空间,会有很多代码模块
其二:代码看起来不是那么直接,有时候会让人费解
总之让我们理解起来比较麻烦的代码方式就应该简化
好了,那么java8就来给我们做简化了,这里可以使用Lambda表达式解决
上面使用匿名类的代码可修改为如下代码
一行代码就解决了上面的匿名代码块。那么我们为了更方便筛选,可写一个通用的过滤方法
这样一来我们的调用方式就简单了
当然这里也可以把表达是写在一个方法里面,作为一个独立的代码块传递
这下厉害了,代码代码块可以当作参数了传递。
原文地址: https://zhuanlan.zhihu.com/p/31863667
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
相关文章