MST

星途 面试题库

面试题:Java中Stream多方法组合时filter和map方法执行顺序问题

在Java Stream中,假设有一个List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);,现在要对这个列表先进行过滤,只保留偶数,然后将每个偶数乘以2。请写出使用Stream多方法组合实现该功能的代码,并说明filter和map方法的执行顺序是怎样的,为什么这样设计?
46.2万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

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

filter和map方法的执行顺序及原因

  1. 执行顺序:先执行filter方法,再执行map方法。
  2. 原因:这种设计符合Stream的设计理念和优化策略。Stream操作分为中间操作(如filtermap)和终端操作(如collect)。中间操作是惰性求值的,它们不会立即执行,而是记录下对Stream的操作。只有当终端操作执行时,所有的中间操作才会被“串联”起来执行。先filtermap,Stream可以先过滤掉不需要的数据,减少后续map操作的数据量,从而提高整体的执行效率。如果先mapfilter,就会对所有数据进行map操作,然后再过滤,做了很多不必要的计算。