🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
转载自:https://www.runoob.com/java/java8-functional-interfaces.html **** **1. 什么是函数式接口** 函数式接口(Functional Interface)就是<mark>一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口</mark>。 * 函数式接口可以被隐式转换为 lambda 表达式。 * Lambda 表达式和方法引用(实际上也可认为是Lambda表达式)上。 **2. 定义一个函数式接口的例子** ```java public class FunctionalInterfaceDemo { /** * 定义函数式接口 GreetingService。 * 加不加注解 @FunctionalInterface 对于接口是不是函数式接口没有影响, * 该注解只是提醒编译器去检查该接口是否仅包含一个抽象方法,即是否符合函数式接口的定义。 * */ @FunctionalInterface interface GreetingService { void sayMessage(String message); } public static void main(String[] args) { GreetingService greetingService = message -> System.out.println("Hello " + message); greetingService.sayMessage("Tom"); //Hello Tom } } ``` <br/> **3. jdk 1.8之前以及 jdk 1.8 提供的函数式接口** jdk 1.8之前以及 jdk 1.8 提供的函数式接口有哪些参考:https://www.runoob.com/java/java8-functional-interfaces.html 。 <br/> 下面演示函数式接口`java.util.function.Predicate<T>`的使用。 Predicate <T> 接口是一个函数式接口,它接受一个输入参数 T,返回一个布尔值结果。 该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)。 该接口用于测试对象是 true 或 false。 ```java import java.util.Arrays; import java.util.List; import java.util.function.Predicate; public class Java8Tester { public static void main(String args[]) { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); Predicate<Integer> p1 = n -> n == 5; System.out.println("n是否等于5:" + p1.test(5)); //n是否等于5:true System.out.println("输出所有数据:"); eval(list, n -> true); //1 2 3 4 5 6 7 8 9 System.out.println("输出所有偶数:"); eval(list, n -> n % 2 == 0); //2 4 6 8 System.out.println("输出大于 3 的所有数字:"); eval(list, n -> n > 3); //4 5 6 7 8 9 } public static void eval(List<Integer> list, Predicate<Integer> predicate) { for (Integer n : list) { if (predicate.test(n)) { System.out.print(n + " "); } } } } ```