JAVA函数式编程进阶Lambda函数式编程

函数编程简介

重用是建立在对象和类型系统之上。而Java 8中则将重用的概念更进一步,使用函数也能够实现代码的重用。

  1. 将函数作为参数传入到另外一个函数中
  2. 函数的返回值可以是函数类型
  3. 在函数中创建另一个函数

函数编程演变历

  1. 单一维度判断条件
public void filterElectronicsSkus() {
   // 获得数组
    List<Sku> cartSkuList = CartService.getCartSkuList()
    // 查找购物车中数码类商品
    List<Sku> result = CartService.filterElectronicsSkus(cartSkuList);
    System.out.println(
            JSON.toJSONString(result, true));
}
  1. 多维度判断条件
    public void filterSkusByCategory() {
        List<Sku> cartSkuList = CartService.getCartSkuList();

        // 查找购物车中图书类商品集合
        List<Sku> result = CartService.filterSkusByCategory(
                cartSkuList, SkuCategoryEnum.BOOKS);

        System.out.println(JSON.toJSONString(
                result, true));
    }
  1. 实体类作为参数
    public void filterSkus() {
        List<Sku> cartSkuList = CartService.getCartSkuList();

        // 过滤商品总价大于2000的商品
        List<Sku> result = CartService.filterSkus(
                cartSkuList, new SkuTotalPricePredicate());

        System.out.println(JSON.toJSONString(
                result, true));
    }
  1. 匿名类作为参数
    public void filterSkus() {
        List<Sku> cartSkuList = CartService.getCartSkuList();

        // 过滤商品总价大于2000的商品
        List<Sku> result = CartService.filterSkus(
                cartSkuList, new SkuTotalPricePredicate());

        System.out.println(JSON.toJSONString(
                result, true));
    }
  1. 匿名类作为参数
    public void filterSkus() {
        List<Sku> cartSkuList = CartService.getCartSkuList();

        // 过滤商品单价大于1000的商品
        List<Sku> result = CartService.filterSkus(
        // SkuPredicate是一个接口函数
                cartSkuList, new SkuPredicate() {
                    @Override
                    public boolean test(Sku sku) {
                        return sku.getSkuPrice() > 1000;
                    }
                });

        System.out.println(JSON.toJSONString(
                result, true));
    }
  1. Lambda表达式作为参数
    public void filterSkus() {
        List<Sku> cartSkuList = CartService.getCartSkuList();

        // 过滤商品单价大于1000的商品
        List<Sku> result = CartService.filterSkus(
                cartSkuList,
                (Sku sku) -> sku.getSkuPrice() > 1000);

        System.out.println(JSON.toJSONString(
                result, true));
    }

Lambda表达简介

  1. JAVA8引入函数式编程
  2. 可以理解为一直匿名函数的替代
  3. 通过行为参数化传递代码

Lambda表达形式

  1. (parameters) -> expression
  2. (parameters) -> {statement}

函数接口

  1. 接口中只有一个抽象方法
  2. JAVA8的函数式接口注释:@FunctionInterface
  3. 函数式接口的抽象方法签名:函数描述符

方法引用

  1. 指向静态方法的方法引用 Integer::parseInt
  2. 指向任意类型实例方法的方法引用 String::length
  3. 指向现有对象的实例方法的方法引用 stringBuilder::append
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值