定义
一个接口里有且仅有一个抽象方法,但是可以有多个非抽象方法,这样的接口称之为——函数式接口
引入
常见的函数式接口:Runnable
只有一个抽象方法——run();
四大基本函数式接口
是 java.util.function 包下最基本的四个函数式接口。
Function
Function 接口的 apply 方法,就是让你传入一个参数,返回一个值。
并且在泛型中体现了 传入 和 返回 的参数类型。
实例:
import java.util.function.Function;
public class Function_Demo {
public static void main(String[] args) {
Function<String,String> function = new Function<String, String>() {
@Override
public String apply(String s) {
return s;
}
};
System.out.println(function.apply("Sky"));
//lambda 表达式写法:
function = ((str)->{ return str;});
System.out.println(function.apply("Song"));
}
}
打印结果:
Sky
Song
Predicate
Predicate 接口的 test 方法就是传入一个参数,返回一个 boolean 值。
实例:
import java.util.function.Predicate;
public class Predicate_demo {
public static void main(String[] args) {
Predicate<Integer> predicate =new Predicate<Integer>() {
@Override
public boolean test(Integer integer) {
return 0 != integer;
}
};
System.out.println(predicate.test(0));
//lambda 表达式写法:
predicate = (integer -> {return 0 != integer;});
System.out.println(predicate.test(1));
}
}
打印结果:
false
true
Consumer
Consumer 接口的 accept 方法就是 传入一个参数,但是不返回值。
是的,穿进去的值被消费量,顾名思义!!
实例:
import java.util.function.Consumer;
public class Consumer_Demo {
public static void main(String[] args) {
Consumer<String> consumer = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println("消费:"+s);
}
};
consumer.accept("cake");
//lambda 表达式写法:
consumer = (str)->{ System.out.println("消费:"+str); };
consumer.accept("money");
}
}
打印结果:
消费:cake
消费:money
有了 消费者 自然要有 生产者!
Supplier
Supplier 接口的 get 方法就是不用往里传参数,就能返回一个值。
实例:
import java.util.function.Supplier;
public class Supplier_Demo {
public static void main(String[] args) {
Supplier<String> supplier = new Supplier<String>() {
@Override
public String get() {
return "提供:Sky";
}
};
System.out.println(supplier.get());
//lambda 表达式写法:
supplier = ()->{return "提供:Song";};
System.out.println(supplier.get());
}
}
打印结果:
提供:Sky
提供:Song
That’s all. Thank you.