Bohr-L Bohr-L
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

刘博

I'm a slow walker, But I never walk backwards.
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 数据处理与存储类

  • Spring 生态类

  • 缓存问题类

  • 多线程类

  • JVM 类

  • MySQL 类

  • Java 8 + 特性类

    • 使用 Java 8 的优点是什么?
    • 集合与流有何不同?
    • 什么是 Lambda 表达式?
    • 解释 Predicate 和 Consumer 函数式接口
      • peek () 方法在 Java 8 中的作用?
      • 什么是函数式接口?
      • 接口中的静态方法有什么作用?
      • skip (long) 和 limit (long) 的区别?
      • 抽象类和接口的异同?
      • overload 与 override 的区别?
      • HashMap 在 Java 8 中的变化?
      • HashMap、LinkedHashMap、Hashtable、ConcurrentHashMap 的区别?
      • Lambda 参数列表与箭头运算符的作用?
      • sleep () 和 wait () 的区别?
      • throw 与 throws 的区别?
      • final、finally、finalize 的区别?
      • Collection 与 Collections 的区别
      • ArrayList、LinkedList、Vector 的区别?
    • 其他技术类

    • 常见面试题
    • Java 8 + 特性类
    刘博
    2025-12-29
    目录

    解释 Predicate 和 Consumer 函数式接口

    Predicate 和 Consumer 是 Java 8java.util.function包中的核心函数式接口,均用于 “函数式编程中的参数传递”,但职责不同:

    # 1. Predicate 接口(断言型接口)

    • 核心作用:接收一个参数,返回boolean值(用于判断条件是否成立);

    • 抽象方法:boolean test(T t);

    • 常用场景:数据过滤(如 Stream 的filter方法)、条件判断;

    • 默认方法:提供and(与)、or(或)、negate(非)等方法,支持条件组合;

    • 示例:

      // 定义Predicate:判断数字是否为偶数
      Predicate<Integer> isEven = num -> num % 2 == 0;
      
      // 测试条件
      System.out.println(isEven.test(4)); // true
      System.out.println(isEven.test(5)); // false
      
      // 条件组合(偶数且大于10)
      Predicate<Integer> isGreaterThan10 = num -> num > 10;
      Predicate<Integer> condition = isEven.and(isGreaterThan10);
      System.out.println(condition.test(12)); // true
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11

    # 2. Consumer 接口(消费型接口)

    • 核心作用:接收一个参数,无返回值(用于 “消费” 数据,如打印、修改属性);

    • 抽象方法:void accept(T t);

    • 常用场景:数据处理(如 Stream 的forEach方法)、结果输出;

    • 默认方法:andThen(链式调用,先执行当前 Consumer,再执行下一个);

    • 示例:

      // 定义Consumer:打印数据
      Consumer<String> print = s -> System.out.println("输出:" + s);
      
      // 消费数据
      print.accept("Hello Lambda"); // 输出:输出:Hello Lambda
      
      // 链式调用(先打印,再转大写打印)
      Consumer<String> printUpper = s -> System.out.println("大写输出:" + s.toUpperCase());
      print.andThen(printUpper).accept("hello"); 
      // 输出:输出:hello → 大写输出:HELLO
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10

    # 核心区别

    • Predicate:有入参、有返回值(boolean),侧重 “判断”;
    • Consumer:有入参、无返回值,侧重 “处理”。

    上次更新: 12/30/2025
    什么是 Lambda 表达式?
    peek () 方法在 Java 8 中的作用?

    ← 什么是 Lambda 表达式? peek () 方法在 Java 8 中的作用?→

    最近更新
    01
    CPU 使用率较高排查和解决
    12-29
    02
    JVM OOM 问题如何排查和解决
    12-29
    03
    接口防刷怎么实现?
    12-29
    更多文章>
    Theme by Vdoing | Copyright © 2025-2026 Bohr-L's note
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式