面试题答案
一键面试- 添加日志输出:
- 在每个关键操作(如
map
、filter
、flatMap
)前使用peek
方法添加日志输出。例如:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); numbers.stream() .peek(num -> System.out.println("Before map: " + num)) .map(n -> n * 2) .peek(num -> System.out.println("After map: " + num)) .filter(n -> n > 5) .peek(num -> System.out.println("After filter: " + num)) .collect(Collectors.toList());
- 这样可以观察数据在每个操作前后的状态,帮助判断哪个操作导致数据不符合预期。
- 在每个关键操作(如
- 拆分成独立步骤:
- 将复杂的Stream操作链拆分成多个独立的步骤。例如:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); Stream<Integer> stream1 = numbers.stream(); Stream<Integer> stream2 = stream1.map(n -> n * 2); Stream<Integer> stream3 = stream2.filter(n -> n > 5); List<Integer> result = stream3.collect(Collectors.toList());
- 然后可以在每一步之间添加断点,使用调试工具(如Intellij IDEA的调试功能)来观察每个中间流的状态,进而确定问题出在哪一步。
- 使用测试数据:
- 用简单且可预测的测试数据替换原始数据。例如,如果原始数据是从数据库查询得到的复杂对象列表,可以创建一个包含几个简单对象的测试列表。
- 这样更容易分析每个操作的结果,因为测试数据的行为更容易理解和预测。
- 检查函数逻辑:
- 仔细检查
map
、filter
、flatMap
等操作中使用的函数逻辑。比如map
操作中的映射函数是否正确实现了预期的转换,filter
操作中的过滤条件是否符合需求。 - 可以通过手动在测试环境中调用这些函数,传入测试数据,验证其逻辑正确性。
- 仔细检查