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
    目录

    peek () 方法在 Java 8 中的作用?

    peek()是 Java 8 Stream API 中的中间操作,核心作用是 “遍历流中的元素并执行副作用操作(如打印、调试),但不改变流的元素”,具体特性如下:

    # 1. 核心特性

    • 惰性执行:作为中间操作,仅在终端操作(如forEach、collect)触发时执行;
    • 不改变流结构:仅读取元素,不新增、删除或修改流中的元素(修改元素属性除外,但不推荐);
    • 支持链式调用:可与其他中间操作(如filter、map)串联。

    # 2. 与 forEach () 的区别

    对比维度 peek ()(中间操作) forEach ()(终端操作)
    操作类型 中间操作,不触发流执行 终端操作,触发流执行
    核心作用 调试、日志记录(副作用操作) 消费元素(最终处理)
    流状态 执行后流仍可继续处理(如后续collect) 执行后流关闭,不可再使用

    # 3. 适用场景

    • 调试流处理:查看流中元素在各中间操作后的状态(如过滤后、映射后的元素);
    • 日志记录:记录流中元素的处理过程(如打印元素值);
    • 临时修改元素属性(不推荐,易引发副作用)。

    # 示例

    List<String> list = Arrays.asList("apple", "banana", "cherry");
    List<String> result = list.stream()
        .filter(s -> s.length() > 5) // 过滤长度>5的元素
        .peek(s -> System.out.println("过滤后:" + s)) // 调试:打印过滤后的元素
        .map(String::toUpperCase) // 转为大写
        .peek(s -> System.out.println("映射后:" + s)) // 调试:打印映射后的元素
        .collect(Collectors.toList()); // 终端操作(触发执行)
    
    // 输出:
    // 过滤后:banana
    // 映射后:BANANA
    // 过滤后:cherry
    // 映射后:CHERRY
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    上次更新: 12/30/2025
    解释 Predicate 和 Consumer 函数式接口
    什么是函数式接口?

    ← 解释 Predicate 和 Consumer 函数式接口 什么是函数式接口?→

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