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