Java中Lambda表达式可以被用于很多Java内置的函数式接口。Java 8引入了大量函数式接口,这些接口定义了不同类型的函数,包括消费型函数、生产型函数、谓词等。通过Lambda表达式,我们可以传递实现了这些接口的方法或者行为。下面是一些常见的Java内置函数式接口:
1、Consumer<T>:代表输入参数为T类型,返回值为空的“消费型”函数式接口。Lambda 表达式可以作为该接口的唯一抽象方法的实现。 示例代码:
代码语言:javascript复制Consumer<String> consumer = (input) -> System.out.println(input);
consumer.accept("Lambda");
2、Supplier<T>:代表不接受任何输入参数,但需要返回T类型结果的接口。Lambda 表达式可以作为该接口的唯一抽象方法的实现。 示例代码:
代码语言:javascript复制Supplier<Integer> integerSupplier = () -> new Random().nextInt();
System.out.println(integerSupplier.get());
3、Function<T, R>:代表输入参数为 T 类型,输出参数为 R 类型的“生产型”函数式接口。Lambda 表达式可以作为该接口的唯一抽象方法的实现。 示例代码:
代码语言:javascript复制Function<String, Integer> function = (input) -> input.length();
System.out.println(function.apply("Lambda"));
4、Predicate<T>:代表管理一个输入参数为 T 类型,结果类型为布尔类型的“谓语”(包含任何类型的布尔函数)。Lambda 表达式可以作为该接口的唯一抽象方法的实现。 示例代码:
代码语言:javascript复制Predicate<Integer> predicate = (input) -> input > 10;
System.out.println(predicate.test(30));
5、BiFunction<T, U, R>:代表输入参数为 T,U 类型,输出参数为 R 类型的“生产型”函数式接口。Lambda 表达式可以作为该接口的唯一抽象方法的实现。 示例代码:
代码语言:javascript复制BiFunction<Integer, Double, String> biFunction = (a, b) -> "结果是:" (a * b);
System.out.println(biFunction.apply(10, 2.0));
6、BinaryOperator<T>:该 Lambda 表达式使用两个相同的类型数据,将结果转换成与该类型相应的值。比如,加法、减法等操作均属于二元运算交易。该接口继承自 BiFunction 接口。 示例代码:
代码语言:javascript复制BinaryOperator<Integer> binaryOperator = (a, b) -> a b;
System.out.println(binaryOperator.apply(1, 2));
7、UnaryOperator<T>:与前面的 BinaryOperator 相似,不同之处在于它只运算了一个参数并且结果和参数类型相同。 示例代码:
代码语言:javascript复制UnaryOperator<Boolean> not = (flag) -> !flag;
System.out.println(not.apply(true));
除此之外还有很多其它函数式接口,例如Runnable(TimeUnit time),Comparator(T i, T j),ToIntFunction(T t),ToDoubleBiFunction(T t, U u)等,不过这些接口使用较为少见。
总之,Java中的Lambda 表达式为程序员提供了一个更加高效、简洁和灵活的代码结构,并且在Java8 才被引入到函数式编程的语法中。通过 Java Lambda 表达式,我们可以以一种优雅、安全并且可维护的方式,设计出各种功能强大的应用程序。