MST
星途 面试题库

面试题:Java中Stream peek方法的常见用途及使用场景

请阐述Java Stream中peek方法的常见用途,并举例说明至少两个在实际开发中可能用到peek方法的场景。
28.1万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

peek方法常见用途

  1. 调试:用于在流处理过程中查看元素,而不改变流本身。
  2. 副作用操作:在不影响流元素处理逻辑的情况下,对元素执行某些操作,比如记录日志等。

实际开发场景举例

  1. 调试流操作
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamPeekExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        List<Integer> squaredNumbers = numbers.stream()
               .peek(System.out::println)
               .map(n -> n * n)
               .collect(Collectors.toList());
        System.out.println(squaredNumbers);
    }
}

在此例中,peek(System.out::println) 帮助我们在流操作过程中,打印出每个即将被 map 操作处理的元素,方便调试流处理逻辑。 2. 记录日志

import java.util.Arrays;
import java.util.List;
import java.util.logging.Logger;

public class LoggingWithPeek {
    private static final Logger logger = Logger.getLogger(LoggingWithPeek.class.getName());

    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
        names.stream()
               .peek(name -> logger.info("Processing name: " + name))
               .map(String::toUpperCase)
               .forEach(System.out::println);
    }
}

这里通过 peek 方法对每个流经的元素记录日志,在不改变流处理结果的同时,记录下处理过程中的信息。