• java函数式接口


    一 简介

      函数式接口简单理解就是把方法可以作为对象传递操作。

      之前需要传递方法一般都是两种方式,

      一种方式是使用匿名类,最常见的就是集合的排序方法sort经常被传入一个用于排序比较的匿名类。

      另一种方式就是使用策略模式,把实现了策略接口的对象作为方法传递。

      现在java的函数式接口和lambda表达式丰富并简化了方法的传递。

    二 使用

      在接口上添加@FunctionalInterface声明使它成为函数式接口

       函数式接口只允许有一个抽象方法(很显然,这就是那个要被传递使用的方法)

      例如我们可以这样创建一个函数式接口:

    @FunctionalInterface
    public interface Function<T, R> {
    
        R apply(T t);
    }

    创建对象时可以使用lambda表达式创建,例如:

    Function fuc = (x) -> { x.length() }

    其他方法就可以通过接收接口参数执行接收到的方法。

    例如操作集合常用的java.lang.Iterable 的 foreach方法中就被要求传入一个实现了内置函数式接口Consumer的实例对象:

    default void forEach(Consumer<? super T> action) {
            Objects.requireNonNull(action);
            for (T t : this) {
                action.accept(t);
            }
        }

    如下代码就是利用foreach方法把list中的所有元素输出至控制台。foreach()括号内的代码其实就是创建了一个函数式接口Consumer的实例对象

    list.forEach((x)->System.out.println(x));

    三 java内置常用函数式接口

      除了上面提到的Consumer外,java还有Supplier等其他接口,全都在java.util.function包内,他们的主要区别就是抽象方法的参数和返回值的数量以及类型不一样。

    四 lambda 表达式中的双冒号::

      使用双冒号可以更方便的从已有类或对象中创建出函数式接口的对象

      例如上述foreach的代码就可以简写成list.forEach(System.out::println);

      双冒号共有四种使用方法:

          对象::实例方法

          类::实例方法

          类::静态方法

          类:new

  • 相关阅读:
    Linux Shell中管道的原理及C实现框架
    标准文件描述符与标准文件句柄
    Makefile:如何写目标依赖
    CODING 携手优普丰,道器合璧打造敏捷最佳实践
    CODING 邀您参与品牌认知度调查 赢得机会领取猴子抱枕好礼
    敏捷,持续集成/持续交付, DevOps 三者的区别
    从 IT 到 DevOps 实践
    腾讯云大学 x CODING | 远程协作办公新模式
    共同战“疫”,CODING 帮助研发团队高效协同
    研发团队远程办公——如何应用硬核工具无间协作?
  • 原文地址:https://www.cnblogs.com/uip001/p/14741658.html
Copyright © 2020-2023  润新知