java 8 笔记(一) 通过行为参数化传递代码

案列:通过颜色筛选苹果
一般代码逻辑写法

public List<Apple> filterApple(List<Apple> apples){
        List<Apple> result = new ArrayList<Apple>();
        for(Apple apple:apples){
            if("green".equals(apple.getColor())){
                result.add(apple);
            }
        }
        return result;
    }

那么问题来了如果想筛选其他颜色的苹果,就要重新写一个筛选代码,而且这些代码大部分都是重复的。我们也可以修改代码,将颜色作为参数传递过去。但是新的问题又来了,如果想筛选苹果的重量,苹果的种类等等,就要加更多的参数,方法里面还要做多个判断代码又有大部分重复而且维护变的复杂。

使用行为参数化

public List<Apple> filerApple(List<Apple> apples, Predicate<Apple> p){
        List<Apple> result = new ArrayList<Apple>();
        for (Apple apple:apples){
            if(p.test(apple)){
                result.add(apple);
            }
        }
        return result;
    }


List<Apple> apple1 = filerApple(apples,(Apple apple) -> "red".equals(apple.getColor()));//筛选红苹果
List<Apple> apple2 = filerApple(apples,(Apple apple) -> apple.getWeight()>150);//筛选大于150g的苹果

上面就是通过行为filerApple只是做了筛选的操作,至于筛选什东西则通过行为参数传过来。使代码简洁易读。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容