Java 8 新特性之Lambda表达式

发布时间:2024年01月22日


函数式编程(Functional Programming)是把函数作为基本运算单元,函数可以作为变量,可以接收函数,还可以返回函数。历史上研究函数式编程的理论是Lambda演算,所以我们经常把支持函数式编程的编码风格称为Lambda表达式。

在Java中使用Lambda表达式的前提:需要是函数接口。

函数接口

接口中只存在一个需要被实现的抽象方法。

即便该接口中存在默认方法与静态方法,与Object中也存在的抽象方法(如equal等),毕竟所有实现的子类肯定继承自Object,只要只存在一个需要被实现的方法就算函数接口
:JDK1.8新特性:接口中可以存在默认实现的方法(default修饰)与静态方法(必须有方法体)。

下面的接口也属于函数接口

package interfaces;
@FunctionalInterface
public interface MyInterface {
    /*
     * JDK1.8 新特性:接口中可以存在默认实现的方法(default修饰)与静态方法(必须有方法体)。
     *
     */
    // 唯一要手动实现的方法
    int compare(int a, int b);
    // Object的方法,毕竟实现类都是Object的子类,都已经默认实现了equals方法
    boolean equals(Object obj);
    // Object的方法,毕竟实现类都是Object的子类,都已经默认实现了toString方法
    String toString();

    public static void a(){
        System.out.println("我是接口中的静态方法a");
    }
    public static void b(){
        System.out.println("我是接口中的静态方法b");
    }
    default void c(){
        System.out.printf("我是接口中的默认方法c");
    }
    default void d(){
        System.out.printf("我是接口中的默认方法d");
    }

}

Lambda表达式书写

多个形参

参数类型可以省略,如果没有形参,小括号也可以省略

(s1, s2) -> {
    return s1.compareTo(s2);
}

只有一行代码(可省略return与括号)

(s1, s2) -> s1.compareTo(s2)

方法引用

方法引用也是java8的新特性之一, 可以直接引用已有Java类或对象的方法或构造器。方法引用与lambda表达式结合使用,可以进一步简化代码。简化前提:方法引用,是指如果某个方法签名和接口恰好一致,就可以直接传入方法引用。

除了方法名外,方法参数一致,返回类型相同,因此,我们说两者的方法签名一致,可以直接把方法名作为Lambda表达式传入

使用前提

  • 引用处必须是函数式接口
  • 被引用的方法必须已经存在
  • 被引用方法的形参和返回值必须和抽象方法保持一致
  • 被引用方法的功能要满足当前需求
文章来源:https://blog.csdn.net/weixin_43670802/article/details/135752309
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。