面试题答案
一键面试peek方法常见用途
- 调试:用于在流处理过程中查看元素,而不改变流本身。
- 副作用操作:在不影响流元素处理逻辑的情况下,对元素执行某些操作,比如记录日志等。
实际开发场景举例
- 调试流操作
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
方法对每个流经的元素记录日志,在不改变流处理结果的同时,记录下处理过程中的信息。