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

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

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

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

使用行为参数化

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


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

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

你可能感兴趣的:(java 8 笔记(一) 通过行为参数化传递代码)