小知识,大挑战!本文正在参与「程序员必备小知识」创作活动
本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。
JUC并发编程——四大内置函数式接口
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
由于默认方法(default)已经有了实现,所以它们不是抽象方法。
如果一个接口中声明的抽象方法是重写了超类Object类中任意一个public方法,那么这些抽象方法并不会算入接口的抽象方法数量中。
函数式适用于函数式编程,Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。
1、函数型接口
Function<T,R> :接受一个输入参数,返回一个结果。
Function<T,R> 源码:
Function<T,R> 代码实例:
public class Demo01 {
public static void main(String[] args) {
// Function function = new Function<String, String>() {
// @Override //输出输入的值
// public String apply(String s) {
// return s;
// }
// };
// System.out.println(function.apply("s"));
//转换成lambda表达式
Function function = (s)->{return s;};
System.out.println(function.apply("s"));
}
}
2、断定型接口
Predicate<T>:接受一个输入参数,返回一个布尔值结果
Predicate<T>源码:
Predicate<T>代码实例:
public class Demo02 {
public static void main(String[] args) {
// Predicate<String> predicate = new Predicate<String>() {
// @Override//判断传入的值是否为空
// public boolean test(String str) {
// return str.isEmpty();
// }
// };
// System.out.println(predicate.test(""));//true
//转换成lambda表达式
Predicate<String> predicate =(str)->{ return str.isEmpty();};
System.out.println(predicate.test("123"));//false
}
}
3、消费型接口
Consumer<T> :代表了接受一个输入参数并且无返回的操作
Consumer<T>源码:
Consumer代码实例:
public class Demo03 {
public static void main(String[] args) {
// Consumer<String> consumer = new Consumer<String>() {
// @Override//打印字符串
// public void accept(String s) {
// System.out.println(s);
// }
// };
// consumer.accept("打印字符串");//打印字符串
//转换成lambda表达式
Consumer<String> consumer = (s)->{System.out.println(s);};
consumer.accept("打印");//打印
}
}
4、供给型接口
Supplier<T>无参数,返回一个结果。
Supplier<T>源码:
Supplier<T>代码实例:
public class Demo04 {
public static void main(String[] args) {
// Supplier<Integer> supplier = new Supplier<Integer>() {
// @Override
// public Integer get() {
// return 1024;
// }
// };
// System.out.println(supplier.get());//1024
//转换成lambda表达式
Supplier<String> supplier = ()->{return "abcd";};
System.out.println(supplier.get());//abcd
}
}