Java基础——Lambda表达式

1 概述

Lambda表达式是JDK8开始支持的语法,其他语言中也有Lambda表达式,但不同语言的Lambda表达式之前还是存在一些差异。
Java中Lambda表达式作用是简化匿名内部类的代码写法。
需要注意的是Lambda只能简化函数式接口的匿名内部类写法。
语法格式为:

(匿名内部类被重写方法的形参列表)->{
	被重写方法的方法体代码
}

函数式接口是指接口中只有一个抽象方法的接口。

2 Lambda使用

2.1 函数式接口

函数式接口指只有一个抽象方法的接口,可以通过注解@FunctionalInterface来限定接口。

@FunctionalInterface
interface ITest {
    void printString(String s);
}

如果有多个抽象方法,则会报错。
Java基础——Lambda表达式_第1张图片
除此之外,接口中的其他都可以进行定义

@FunctionalInterface
interface ITest {
    int a = 10;

    void printString(String s);

    default void printString1(String s) {
        System.out.println(s);
    }

    static void printString2(String s) {
        System.out.println(s);
    }
}

如默认方法,静态方法,常量这些。

2.2 Lambda表达式使用

正常匿名内部类使用

public class LambdaDemo {
    public static void main(String[] args) {
        ITest iTest = new ITest() {
            @Override
            public void printString(String s) {
                System.out.println(s);
            }
        };
        iTest.printString("hello");
    }
}

@FunctionalInterface
interface ITest {
    int a = 10;

    void printString(String s);
}

使用Lambda表达式

ITest iTest = (String s) -> {
    System.out.println(s);
};
iTest.printString("hello");

由于Lambda有很多简化的写法,所以可以进行简化
以下是一些简化规则:

  • 参数类型可以省略不写
  • 如果只有一个参数,参数类型可以省略,同时()也可以省略
  • 如果Lambda表达式方法体只有一行代码,可以省略大括号不写,同时要省略分号
  • 如果Lambda表达式方法体只有一行代码,如果这行代码是return语句,可以省略大括号不写。但是如果省略大括号,必须省略return不写,同时也要省略“;”
    简化后写法:
ITest iTest = s -> System.out.println(s);
iTest.printString("hello");

其实上面这个还可以简化,使用方法引用进行简化,简化后为:

ITest iTest = System.out::println;
iTest.printString("hello");

对于最后一条省略规则,示例如下:

Integer[] arr = {3, 4, 23, 1, 5};
Arrays.sort(arr, (o1, o2) -> {
    return o1 - o2;
});

可简化为:

Arrays.sort(arr, (o1, o2) -> o1 - o2);

你可能感兴趣的:(#,Java基础知识,java,python,开发语言)