java8笔记:Lambda表达式一

2019-07-04 00:00:00 表达式 笔记 Java8

先说下一个简单筛选编码的变化过程。

首先我们有一个苹果集合:

1、需要筛选出里面绿色属性的苹果。

比较简单直接,直接一个比较,返回满足要求的集合

《java8笔记:Lambda表达式一》
《java8笔记:Lambda表达式一》

2、现在需要一个红色的苹果

那么这时候可以同第一点一样增加一个方法直接过滤红色的苹果,但是为了能满足其他的颜色筛选,这时候我们最好将颜色当作参数传递,ok,这样一来我们就可以满足任何颜色的筛选需求了。

《java8笔记:Lambda表达式一》
《java8笔记:Lambda表达式一》

3、现在需要筛选重量大于10的苹果

这时候我们只能增加一个方法去筛选重量,同时为了满足其他重量的筛选,我们得弄一个和第二点类似的方法

《java8笔记:Lambda表达式一》
《java8笔记:Lambda表达式一》

这时候想想这两个方法似乎可以放在一起公用,ok,那么我们调整一下代码,既可以筛选颜色,同时也满足重量的筛选

《java8笔记:Lambda表达式一》
《java8笔记:Lambda表达式一》

这里省略xxx其他筛选需求,这时候看代码似乎不是那么美观优雅,那么我们来用另外一种方式,让它看起来简洁明了

第一步:定义个接口

《java8笔记:Lambda表达式一》
《java8笔记:Lambda表达式一》

第二步:每一种需求写一个对应的实现类

《java8笔记:Lambda表达式一》
《java8笔记:Lambda表达式一》
《java8笔记:Lambda表达式一》
《java8笔记:Lambda表达式一》
《java8笔记:Lambda表达式一》
《java8笔记:Lambda表达式一》

这样一来我们的每一种筛选需求都会被单独封装在对应的实现类中,那么我们就只管在使用的时候明确需要的过滤实现类就好。只需要一个过滤方法就可以满足所有的过滤需求

《java8笔记:Lambda表达式一》
《java8笔记:Lambda表达式一》 过滤筛选方法

在使用的时候直接传递我们需要的过滤实现类

《java8笔记:Lambda表达式一》
《java8笔记:Lambda表达式一》

当然这里还可以使用匿名类来做过滤

《java8笔记:Lambda表达式一》
《java8笔记:Lambda表达式一》

OK!走到这里,我们会发现我们的过滤筛选方法的参数是很有意思的,第一参数是我们需要筛选的集合,那么第二个参数是我们的筛选规则实现类,也就是我们现在已经在做一件把一种筛选行为当作参数来传递(厉害了)

但是会发现这种做法也挺累的,无论筛选规则多简单,每个都得建一个对应的实现类。

至于使用匿名类的方式有几点不友好

其一:这个代码来比较笨重,因为它占用很多空间,会有很多代码模块

其二:代码看起来不是那么直接,有时候会让人费解

总之让我们理解起来比较麻烦的代码方式就应该简化

好了,那么java8就来给我们做简化了,这里可以使用Lambda表达式解决

上面使用匿名类的代码可修改为如下代码

《java8笔记:Lambda表达式一》
《java8笔记:Lambda表达式一》

一行代码就解决了上面的匿名代码块。那么我们为了更方便筛选,可写一个通用的过滤方法

《java8笔记:Lambda表达式一》
《java8笔记:Lambda表达式一》

这样一来我们的调用方式就简单了

《java8笔记:Lambda表达式一》
《java8笔记:Lambda表达式一》

当然这里也可以把表达是写在一个方法里面,作为一个独立的代码块传递

这下厉害了,代码代码块可以当作参数了传递。

    原文作者:Looye
    原文地址: https://zhuanlan.zhihu.com/p/31863667
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章