Java核心技术知识点笔记—lambda表达式

前言:多年以前,计算机还未问世,逻辑学家Alonzo Church想要形式化地表示能有效计算的数学函数。(奇怪的是,有些函数已经知道是存在的,但却没人知道该如何计算。)他使用了希腊字母lambda(λ)来标记参数。

1、lambda表达式:是一个代码块,以及必须传入代码的变量规范。

1.1、lambda表达式的形式:(参数)->{表达式}

(String first, String second) -> {
            System.out.print(first.length() + second.length());
        }

(1)括号中的参数就是表达式所需的参数,要注意的是,即使表达式没有参数,仍然需要提供括号,像无参方法一样。

() -> {System.out.print("Lambda"); }

(2)如果可以推导出参数的类型,则可以忽略其类型。

Comparator comp = (first, second) -> first.length() - second.length();

(3)如果方法只有一个参数,且参数类型可以推导,那么可以连括号都省略。

ActionListener listener = event->System.out.print("Action");

(4)无需指定lambda表达式的返回类型,上下文总是会推导出lambda的返回类型。

2、函数式接口:对于只有一个抽象方法的接口,需要这种接口的对象时,可以提供一个lambda表达式。这种接口成为函数式接口(functional interface)。

常用函数式接口

函数式接口 参数类型 返回类型 抽象方法名 描述 其他方法
Runnable void run 作为无参数或返回值的运行
Supplier T get 提供一个T类型的值
Consumer T void accept 处理一个T类型的值 andThen
BiConsumer T,U void accept 处理T和U类型的值 andThen
Function T R apply 有一个T类型参数的函数 compose,andThen,identity
BiFunction T,U R apply 有T和U类型参数的函数 andThen
UnaryOperator T T apply 类型T上的一元操作符 compose,andThen,identity
BinaryOperator T,T T apply 类型T上的二元操作符 andThen,maxBy,minBy
Predicate T boolean test 布尔值函数 and,or,negate,isEqual
BiPredicate T,U boolean test 有两个参数的布尔值函数 and,or,negate

你可能感兴趣的:(Java,java,lambda,函数式接口)