通俗总结
对于函数式接口:所谓函数式接口其实就是以一个函数作为接口,本质是函数
对于 lambda:三个东西,参数,返回值和内容,lambda 本身也就是简化函数写法的一种函数表达式
所以,函数式接口本身就可以看做是一种 lambda,因为函数式接口就是一种函数的表达方式!
精讲
Function
解释
- Function 函数型接口: 一个输入参数,一个输出参数
- 理解:功能性函数式参数
例子
Function<String, String> function = s -> s;
System.out.println(function.apply("hello function"));
Function 源码
Consumer
解释
- Consumer 消费型接口: 一个输入参数,没有返回值
- 理解:消费输入的参数,不需要返回
- lambda: 此处的 println() 方法被当做方法引用(相当于直接调用了别人的方法,而这个方法必须要是与当前函数式接口类型对应的唯一方法的参数返回值结构
- (续 lambda)比方说,此处的 consumer.accept() 方法需要一个字符串参数,不需要返回值,而 System.out.println() 方法也只需要一个字符串参数,无返回值
例子
Consumer<String> consumer = System.out::println;
consumer.accept("hello consumer");
Consumer 源码
Predicate
解释
- Predicate 断定型接口:一个输入参数,返回值是布尔类型
- 谓词,断言
- lambda: 此处的 isEmpty() 方法被当做方法引用(相当于直接调用了别人的方法,而这个方法必须要是与当前函数式接口类型对应的唯一方法的参数返回值结构
- (续 lambda)比方说,此处的 predicate.test() 方法需要一个字符串参数,返回布尔类型的返回值,而 String.isEmpty() 方法也需要一个字符串参数,返回布尔类型的返回值
例子
Predicate<String> predicate = String::isEmpty;
System.out.println(predicate.test("hello predicate"));
Predicate 源码
Supplier
解释
- Supplier 供给型接口 没有参数,只有返回值
- 理解:与 consumer 相反,无参数提供返回
例子
Supplier<Integer> supplier = () -> 1024;
System.out.println(supplier.get());
Supplier 源码
精简
全:
package com.dongua.functionalinterface;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
/**
* @author dongua
* @date 2021/10/20 20:51
**/
public class FunctionDemo {
public static void main(String[] args) {
// Function 函数型接口: 一个输入参数,一个输出参数
// 理解:功能性函数式参数
Function<String, String> function = s -> s;
System.out.println(function.apply("hello function"));
// Consumer 消费型接口: 一个输入参数,没有返回值
// 理解:消费输入的参数,不需要返回
// lambda: 此处的 println() 方法被当做方法引用(相当于直接调用了别人的方法,而这个方法必须要是与当前函数式接口类型对应的唯一方法的参数返回值结构)
// (续 lambda)比方说,此处的 consumer.accept() 方法需要一个字符串参数,不需要返回值,而 System.out.println() 方法也只需要一个字符串参数,无返回值
Consumer<String> consumer = System.out::println;
consumer.accept("hello consumer");
// Predicate 断定型接口:一个输入参数,返回值是布尔类型
// 谓词,断言
// lambda: 此处的 isEmpty() 方法被当做方法引用(相当于直接调用了别人的方法,而这个方法必须要是与当前函数式接口类型对应的唯一方法的参数返回值结构)
// 续 lambda)比方说,此处的 predicate.test() 方法需要一个字符串参数,返回布尔类型的返回值,而 String.isEmpty() 方法也需要一个字符串参数,返回布尔类型的返回值
Predicate<String> predicate = String::isEmpty;
System.out.println(predicate.test("hello predicate"));
// Supplier 供给型接口 没有参数,只有返回值
// 理解:与 consumer 相反,无参数提供返回
Supplier<Integer> supplier = () -> 1024;
System.out.println(supplier.get());
}
}