Java 8 给我们提供了一些原生的函数式接口去使用;我们可以通过继承这些接口去定义自己的函数式接口,或者根据需求直接使用这些接口。原生的函数式接口可分为四大类。
- Consumer接口: 消费型接口,内置函数 void accept(T t),可传入对象参数,不返回。
- Supplier接口:供给型接口,内置函数 T get(), 不接受参数但返回。
- Function<T,R>接口:函数型接口,内置函数 R apply(T t), 接受对象参数并返回。
- Predicate接口: 断定型接口,内置函数 boolean test(T t), 接受对象参数并返回布尔值。
示例代码:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;import org.junit.jupiter.api.Test;import static java.lang.System.out;
public class LambdaTest2 {
@Testpublic void test1() {
Consumer<Integer> consumer = number -> out.println("Consumer1: " + number);consumer.andThen(number -> out.println("Consumer2:" + number)).accept(10);}@Testpublic void test2() {
Supplier<Person> supplier = () -> new Person();out.println(supplier.get());}@Testpublic void test3() {
Function<String, Person> function = name -> new Person(name, 1, 20);out.println(function.apply("Steven"));}@Testpublic void test4() {
List<Integer> list = Arrays.asList(1,2,3,4,5,6);out.println(filterNumber(list, number -> number > 3));}private List<Integer> filterNumber(List<Integer> list, Predicate<Integer> predicate) {
List<Integer> listTemp = new ArrayList<Integer>();for(Integer number : list) {
if(predicate.test(number)) {
listTemp.add(number);}}return listTemp;}
}
输出:
Consumer1: 10
Consumer2:10
Person [name=Nobody, gender=0, age=0]
Person [name=Steven, gender=1, age=20]
[4, 5, 6]
- 其他JDK提供的函数式接口
这些接口的使用与四大接口大同小异, 使用时注意传入对象参数的个数和返回值即可。