为了账号安全,请及时绑定邮箱和手机立即绑定

Java8新特性之:行为参数化传递代码

标签:
Java

    行为参数化:一个方法接受多个不同的行为(或战略)作为参数,并在内部使用他们,完成不同的行为的能力。 

public interface ApplePredicate {    /**    * 谓词(选择标准)    * @param apple    * @return    */    boolean test(Apple apple);}
public class AppleWeightPredicate implements ApplePredicate{    @Override    public boolean test(Apple apple) {        return apple.getWeight() > 150;    }}
public class AppleGreenColorPredicate implements ApplePredicate{    @Override    public boolean test(Apple apple) {        return "green".equals(apple.getColor());    }}
public class FilterApples {    /**    * ApplePredicate参数实现了行为参数化    * @param inventory    * @param p    * @return    */    public static List<Apple> filterApples(List<Apple> inventory, ApplePredicate p) {        List<Apple> result = new ArrayList<Apple>();        for (Apple apple : inventory) {            if (p.test(apple)) {                result.add(apple);            }        }        return result;    }        /**    * 匿名类实现    * @param inventory    * @return    */    public List<Apple> redApples(List<Apple> inventory) {        return filterApples(inventory, new ApplePredicate() {            @Override            public boolean test(Apple apple) {                return "red".equals(apple.getColor());            }        });    }    /**    * 使用Lambda表达式    * @param inventory    * @return    */    public List<Apple> yellowApples(List<Apple> inventory) {        return filterApples(inventory, (Apple apple) -> "yellow".equals(apple.getColor()));    }}


    List类型抽象化:

public interface CommonPredicate<T> {    /**    * 类型抽象化    * @param t    * @return    */    boolean test(T t);}
public class filter {  /**  * list类型抽象化  * @param list  * @param p  * @param <T>  * @return  */  public static <T> List<T> filter(List<T> list, CommonPredicate<T> p) {        List<T> result = new ArrayList<T>();    for (T e : list) {      if (p.test(e)) {        result.add(e);      }    }    return result;  }      public List<Apple> redApples(List<Apple> inventory) {    return filter(inventory, (Apple apple) -> "red".equals(apple.getColor()));  }      public List<Integer> main(List<Integer> inventory) {      return filter(inventory, (Integer i) -> i % 2 == 0);    }}

    行为参数化类似于策略设计模式。



点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消