AIGC标识 函数式接口简介

java.util.function 是 Java 8 专门为 Lambda / Stream 提供的函数式接口包,一共只有 4 大类核心接口,剩下全是它们的变形。


一、4 个核心函数式接口

1. Supplier 提供者

  • 抽象方法:T get()
  • 作用:无入参,返回一个结果(造数据、懒加载)
  • 示例:
    Supplier<String> supplier = () -> "hello";
    String s = supplier.get();
    

2. Consumer 消费者

  • 抽象方法:void accept(T t)
  • 作用:接收一个参数,不返回值(消费、打印、修改、存库)
  • 示例:
    Consumer<String> consumer = System.out::println;
    consumer.accept("test");
    

3. Function<T, R> 函数

  • 抽象方法:R apply(T t)
  • 作用:接收一个参数,返回一个结果(转换、映射)
  • 示例:
    Function<String, Integer> fun = String::length;
    int len = fun.apply("abc");
    

4. Predicate 断言/判断

  • 抽象方法:boolean test(T t)
  • 作用:接收参数,返回布尔值(过滤、条件判断)
  • 示例:
    Predicate<String> pred = s -> s.length() > 3;
    boolean b = pred.test("abcd");
    

二、常用变形(记住规律即可)

1. 两个参数的版本

  • BiConsumer<T, U>void accept(T, U)
  • BiFunction<T, U, R>R apply(T, U)
  • BiPredicate<T, U>boolean test(T, U)

2. 基本数据类型优化(避免装箱)

  • IntFunction<R>LongFunction<R>DoubleFunction<R>
  • ToIntFunction<T>ToLongFunction<T>
  • IntConsumerLongConsumerIntPredicate

3. 输入输出同类型

  • UnaryOperator:继承 Function,T apply(T t)(一元运算)
  • BinaryOperator:继承 BiFunction,T apply(T t, T u)(二元运算,如求和)

三、对应 Stream 里的用法(最实用)

接口Stream 方法作用
Predicate filter() 过滤
Function<T, R> map() 映射转换
Consumer forEach()/peek() 遍历消费
Supplier generate() 生成流数据
BinaryOperator reduce() 聚合计算

四、一句话总结

  • Supplier:无中生有
  • Consumer:只进不出
  • Function:有进有出(转换)
  • Predicate:判断真假

 

posted @ 2026-08-13 14:26  轻舟软件  阅读(4)  评论(0)    收藏  举报