Java 8 ——行为参数化

前言

《Java8实战》不得不说是一本好书,捧起来看起来就兴奋得不想放下,其中介绍的函数式编程实在是太令人兴奋了,不仅仅大大提高了代码的可读性,而且提高了代码的重用性,并且语法简单。

Java 8中新增的功能是自Java 1.0发布以来18年以来,发生变化最大的一次。我本身没有太大的体会,但新增的这些功能,每一个都让我兴奋,这里就书中的内容简单的介绍一下Java 8的这些新特性,我相信很快,你也会有跟我一样的感受。

(1)用行为参数化把代码传递给方法

Java 8中增加了通过API来传递代码的能力,但这实在听起来太绕了,这到底在说什么!打个比方或许要容易理解一些,你想要写两个只有几行代码不同的方法,那现在你只需要把不同的那部分代码作为参数传递进去就可以了。

在Java 8中,这样做起来(不止于匿名类)远远比你想象的要来得更加清晰、简洁。行为参数化

我们现在来考虑这样一个例子:有个应用程序是帮助农民了解自己的库存的,这位农民可能想有一个查找库存中所有绿色苹果的功能。但到了第二天,他可能会告诉你:“其实我还想找出所有重量超过150克的苹果”。又过了两天,他可能会继续补充道:“要是我可以找出所有既是绿色,重量也超过150克的苹果,那就太棒了。”

想一下你应该如何应对这样不断变化的需求呢?理想的状态下,你应该把你的工作量降到最小,此外类似的新功能实现起来还应该很简单,而且易于长期维护。

第一次尝试:筛选绿苹果

第一个解决方案可能是下面这样的:

public static List<Apple> filterGreenApples(List<Apple> inventory){
    List<Apple> result = new ArrayList<>();
    for(Apple apple: inventory){
        if( “green”.equals(apple.getColor()) {
            result.add(apple);
        }
    }  // end for
    return result;
}

这样的代码看起来似乎也没什么问题,也很容易看懂,但是现在农民改主意了,他还想要筛选红苹果,又该怎么做呢?简单的方法就是复制这个方法,然后把函数名称和if判断的条件来分别匹配到红苹果上就可以了。然而,要是农民想要筛选出多种颜色:浅绿色,暗红色、黄色等,这种方法就应付不了了。一个良好的原则是在编写类似的代码之后,尝试将其抽象化。

第二次尝试:把颜色作为参数

一种做法是给方法加一个参数,把颜色变成参数,这样就灵活地适应了变化:

public static List<Apple> filterApplesByColor(List<Apple> inventory,String color){
    List<Apple> result = new ArrayList<>();
    for(Apple apple: inventory){
        if(apple.getColor().equals(color)){
            result.add(apple);
        }
    }  // end for
    return result;
}

现在,只要像下面这样调用方法,农民朋友就会满意了:

List<Apple> greenApples 
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值