java.util.function包下四大函数式接口
函数式接口
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
函数式接口可以被隐式转换为 lambda 表达式。
查看API可得出,java.util.function包下主要是如下四大函数式接口,其他接口都是对这几个接口的扩展
Consumer | Represents an operation that accepts a single input argument and returns no result. |
---|---|
Function<T,R> | Represents a function that accepts one argument and produces a result. |
Predicate | Represents a predicate (boolean-valued function) of one argument. |
Supplier | Represents a supplier of results. |
- Consumer 函数型接口 有一个参数输入T,有一个输出R
import java.util.function.Function; public class Demo01 { public static void main(String[] args) { //工具类:输出输入的值 // Function function = new Function<String,String>() { // @Override // public String apply(String str) { // return str; // } // }; //Function<String,String> function = (str) -> {return str;}; //lambda表达式简化 Function<String,String> function = str -> {return str;}; System.out.println(function.apply("asd")); } }
- Function<T,R> 断定型接口 有一个输入参数,返回值只能是布尔值
import java.util.function.Predicate; public class Demo02 { public static void main(String[] args) { //判断字符串是否为空 // Predicate<String> predicate = new Predicate<String>() { // @Override // public boolean test(String str) { // return str.isEmpty(); // } // }; //lambda表达式简化 Predicate<String> predicate = (str) -> {return str.isEmpty();}; System.out.println(predicate.test("")); } }
- Predicate 消费型接口 只有输入,没有返回值
import java.util.function.Consumer; public class Demo03 { public static void main(String[] args) { // Consumer<String> consumer = new Consumer<String>() { // @Override // public void accept(String str) { // System.out.println(str); // } // }; //lambda表达式简化 Consumer<String> consumer = (str) -> {System.out.println(str);}; consumer.accept("abcdefg"); } }
- Supplier 供给型接口 没有参数,只有返回值
import java.util.function.Supplier; public class Demo04 { public static void main(String[] args) { // Supplier supplier = new Supplier<Integer>() { // @Override // public Integer get() { // System.out.println("get()"); // return 1024; // } // }; //lambda表达式简化 Supplier supplier = () -> {return 1024;}; System.out.println(supplier.get()); } }