java8之lambda第二弹

lambda表达式主要表现形式为函数式接口的使用。

函数式接口:只有一个待实现方法的接口。

格式:() - > {code} 左侧代表入参,右侧代表需要执行的逻辑。

实现接口方法,由原始实现转变至lambda实现

接口:MyPredicate

//添加该注解后接口中只能存在一个待实现的方法,添加多个会报错。
//可以添加多个已实现的方法
@FunctionalInterface
public interface MyPredicate<T>{
    boolean  handler(T t);
}
    public static List<UserPo> list;
    static  {
        list = new ArrayList<UserPo>(){{
            add(new UserPo("zhangsan",20,new Date(),"shanghai","cn"));
            add(new UserPo("lisi",24,new Date(),"shanghai","cn"));
            add(new UserPo("wangwu",25,new Date(),"shanghai","cn"));
            add(new UserPo("zhaoliu",27,new Date(),"shanghai","cn"));
            add(new UserPo("tianqi",27,new Date(),"shanghai","cn"));
        }};
    }

public List<UserPo> handler(List<UserPo> list, MyPredicate<UserPo> myPredicate){
        List<UserPo> us = new ArrayList<>();
        for (UserPo u : list) {
            if(myPredicate.handler(u)){
                us.add(u);
            }
        }
        return us;
    }

***以策略模式实现接口方法

演化步骤:

java7:

创建子类实现该接口

public class MyPredicateByAge implements MyPredicate<UserPo> {
    @Override
    public boolean handler(UserPo t) {
        return t.getAge()>21;
    }
}

调用接口方法


    /**
     * 条件筛选
     * 自定义接口实现
     * 匿名内部类实现
     */
    @Test
    public void test(){
        //策略模式 筛选条件 ==》年纪大于21的  自定义接口实现
        List<UserPo> handler3 = handler(list, new MyPredicateByAge());
        //策略模式 筛选条件 ==》年纪大于21的  匿名内部类
        List<UserPo> handler4 = handler(list, new MyPredicate<UserPo>() {
            @Override
            public boolean handler(UserPo userPo) {
                return userPo.getAge()>21;
            }
        });
    }

java8:

@Test
    public void test(){
        //lambda  筛选条件 ==》年纪大于21的
        List<UserPo> handler = handler(list, (e) -> e.getAge() > 21);
        System.out.println("------------------------------------------------------");
        //stream  筛选条件 ==》年纪大于21的
        List<UserPo> collect = list.stream().filter(e -> e.getAge() > 21).collect(Collectors.toList());
    }

执行handler(list, (e) -> e.getAge() > 21)时lambda替代了MyPredicate<UserPo> myPredicate

(e) -> e.getAge() > 21具体表示方法 boolean handler(T t) 的实现。

左侧 e 代表入参 T t。

右侧  e.getAge() > 21 代表 handler方法所执行的具体逻辑。

lambda

  • 左侧可以是空参、单参或多参,参数类型可写可不写。
  • 右侧为方法执行的具体逻辑,单行逻辑可以省略大括号,多行逻辑代码需包裹在大括号中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值