前言
在jdk 1.8
之前,可以针对接口采取匿名内部类
的方式,实例化出来。在jdk 1.8 及以后
可以采取Lambda
表达式实现。
只要是函数式接口,都能使用Lambda表达式简化代码。
四大函数式接口
参考开发文档中java.util.function
。
Function 函数式
其特性如源码所示:
1、由
@FunctionalInterface
修饰,表示该接口中有且仅有一个
抽象方法。
2、传递两个参数,参数1
表示传递参数类型
,参数2
表示传出参数类型
。
代码案例:
package function;
import java.util.function.Function;
/**
* Function 函数式接口;两个参数,参数一表示输入类型,参数二表示输出类型
* @FunctionalInterface
*/
public class FuntionDemo1 {
public static void main(String[] args) {
// Function<String, String> function = new Function<String, String>() {
// @Override
// public String apply(String s) {
// return s;
// }
// };
//Function<String, String> function = (s)->{return s;};
Function<String, String> function = s->{
return s;};
System.out.println(function.apply("999"));
}
}
缩减为lambda表达式的根据:
移除图中高亮区域代码。
Predicate 断定性函数
其特性如源码中所示:
1、由
@FunctionalInterface
修饰,表示该接口中有且仅有一个
抽象方法。
2、只有一个传递参数类型,返回类型只能是boolean类型。
package function;
import java.util.function.Predicate;
/**
* 断定性接口:一个参数,输入类型;输出类型只能是boolean类型
* @FunctionalInterface
*/
public class PredicatesDemo1 {
public static void main(String[] args) {
// Predicate<String> predicate = new Predicate<String>() {
// @Override
// public boolean test(String o) {
// return o.isEmpty();
// }
// };
Predicate<String> predicate = (str)->{
return str.isEmpty();};
System.out.println(predicate.test("6666"));
}
}
Consumer 消费者函数
其特性如源码中所示:
1、由
@FunctionalInterface
修饰,表示该接口中有且仅有一个
抽象方法。
2、只有一个传递参数类型,无返回类型。
package function;
import java.util.function.Consumer;
/**
* 消费者接口 :只有输入类型,无返回值
* @FunctionalInterface
*/
public class ConsumerDemo {
public static void main(String[] args) {
// Consumer<String> consumer = new Consumer<String>() {
// @Override
// public void accept(String s) {
// System.out.println(s);
// }
// };
Consumer<String> consumer = (s)->{
System.out.println(s);
};
consumer.accept("666");
}
}
Supplier 供给式函数
其特性如源码所示:
1、由
@FunctionalInterface
修饰,表示该接口中有且仅有一个
抽象方法。
2、无传入类型,只有传出类型。
package function;
import java.util.function.Supplier;
/**
* 供给型接口:无传递参数,只有返回结果
* @FunctionalInterface
*/
public class SupplierDemo {
public static void main(String[] args) {
// Supplier<String> supplier = new Supplier<String>(){
// @Override
// public String get() {
// return "667788";
// }
// };
Supplier<String> supplier = ()->{
return "6666";};
System.out.println(supplier.get());
}
}