函数式接口
1.函数式接口
本篇文章适合新手入门
1.1定义
A 定义:函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
B 适用场景:主要用于函数式编程(即使用lambda表达式编程),函数式接口可以使用于lambda进行参数定义。
C 使用流程:
1)定义函数式接口
2)定义方法使用上面定义的接口进行参数接收,并调用接口中的方法进行逻辑处理
3)具体使用2中的方法的时候,传递lambda表达式进行实际上的逻辑处理
package com.test.fun;
/**
* @FunctionalInterface 注解可以检测接口是否为函数式接口
* 如果不是函数式接口,则编译失败
*/
@FunctionalInterface
public interface Compute<T> {
public int add(int a , int b );
// public int add(int a , int b );
}
1.2 jdk 8 提供的函数接口
接口名 | 说明 |
---|---|
Function<T,R> | 接收一个T类型的参数,返回一个R类型的结果 |
Consumer | 接收一个T类型的参数,不返回值 |
Predicate | 接收一个T类型的参数,返回一个boolean类型的结果 |
Supplier | 不接受参数,返回一个T类型的结果(没有输入,输出是一个对象) |
建议自己运行代码尝试一下:
public class FunctionInterfaceTest {
public static void main(String[] args) {
function();
consumer();
supplier();
predicate();
}
private static void predicate() {
System.out.println("========Predicate========");
Predicate<Integer> predicate=(n)->n>10;
System.out.println(predicate.test(23));
String s="123456";
Predicate<String> predicate1=s::contains;
System.out.println(predicate1.test("123")==true);
System.out.println(predicate1.test("000")==false);
}
private static void supplier() {
System.out.println("========Supplier========");
// Supplier<Boolean> supplier=()->new Random().nextBoolean();
Supplier<Date> supplier=Date::new;
System.out.println(supplier.get());
}
private static void consumer() {
System.out.println("========Consumer========");
// Consumer<String> consumer=(s)->{
// System.out.println(s);
// };
Consumer<String> consumer=System.out::println;
consumer.accept("你好世界");
}
private static void function() {
System.out.println("========function========");
// Function<String, Integer> function=(s)->Integer.valueOf(s);
Function<String, Integer> function=Integer::valueOf;
//类的static方法,让函数成为变量.
Integer ret = function.apply("1234");
System.out.println(ret);
}
}