java内置函数式接口有哪些?

Java 8引入java.util.function包中的函数式接口支持Lambda表达式,1. Supplier无参有返回值;2. Consumer接收参数无返回值;3. Predicate接收参数返回boolean;4. Function输入输出类型可

不同;5. UnaryOperator继承Function,输入输出类型相同;6. BinaryOperator处理两个同类型参数并返回同类型结果;7. BiFunction接收两个不同类型参数返回结果;8. BiConsumer接收两个参数无返回值;9. BiPredicate接收两个参数返回boolean;10. 提供IntSupplier、LongConsumer等基本类型专用接口避免装箱开销。掌握这些接口可高效使用Lambda与Stream API。

Java 8 引入了函数式接口来支持 Lambda 表达式,这些接口都位于 java.util.function 包中。它们是 Java 内置的核心函数式接口,适用于大多数常见的编程场景。

1. Supplier

表示一个无参数、有返回值的函数。常用于提供或生成某个值。

- 函数方法:T get()
- 示例:Supplier s = () -> "Hello";

2. Consumer

接收一个参数,不返回结果。通常用于执行某些操作,如打印或修改对象。

- 函数方法:void accept(T t)
- 示例:Consumer c = System.out::println;

3. Predicate

接收一个参数,返回 boolean 值,常用于条件判断。

- 函数方法:boolean test(T t)
- 示例:Predicate p = x -> x > 10;

4. Function

接收一个输入参数,返回一个结果,常用于类型转换或数据映射。

- 函数方法:R apply(T t)
- 示例:Function f = String::length;

5. UnaryOperator

是 Function 的子接口,输入和输出类型相同。

- 示例:UnaryOperator uo = x -> x * 2;

6. BinaryOperator

接收两个相同类型的参数,返回相同类型的结果,用于二元运算。

- 示例:BinaryOperator bo = (a, b) -> a + b;

7. BiFunction

接收两个不同类型的参数,返回一个结果。

- 函数方法:R apply(T t, U u)
- 示例:BiFunction bf = Math::pow;

8. BiConsumer

接收两个参数,不返回结果。

- 示例:BiConsumer bc = (k, v) -> map.put(k, v);

9. BiPredicate

接收两个参数,返回 boolean。

- 示例:BiPredicate bp = (s, i) -> s.length() == i;

10. 其他常用变体

为基本类型优化的接口,避免自动装箱:

- IntSupplier, LongConsumer, DoublePredicate 等
- ToIntFunction, DoubleToIntFunction 等

基本上就这些。掌握这几个核心接口,就能在日常开发中灵活使用 Lambda 和 Stream API。