面试题答案
一键面试优化思路
- 尽早应用
limit
:将limit
操作尽可能放在流水线靠前的位置,这样可以在数据量还较小时就截断流,减少后续操作处理的数据量。 - 避免不必要的中间操作:检查
filter
、map
等中间操作,确保它们都是必需的。如果某些操作可以在limit
之后进行,并且不会影响结果,可以考虑调整顺序。
优化前代码示例
import java.util.Arrays;
import java.util.List;
public class StreamPerformanceExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
numbers.stream()
.map(n -> n * 2)
.filter(n -> n > 10)
.limit(3)
.forEach(System.out::println);
}
}
优化后代码示例
import java.util.Arrays;
import java.util.List;
public class StreamPerformanceExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
numbers.stream()
.limit(3)
.map(n -> n * 2)
.filter(n -> n > 10)
.forEach(System.out::println);
}
}
在上述优化后代码中,limit
操作提前,使得后续map
和filter
操作处理的数据量大幅减少,从而提升性能。如果map
操作对性能影响较大,且在limit
后进行不影响最终结果,也可将map
操作移到limit
之后进一步优化。