import java.util.Arrays;
import java.util.List;
public class StreamExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
int sumOfSquaresOfEvens = numbers.stream()
.filter(n -> n % 2 == 0)
.mapToInt(n -> n * n)
.sum();
System.out.println(sumOfSquaresOfEvens);
}
}
Stream API的中间操作和终端操作的区别:
- 中间操作:
- 特点:返回一个新的流,允许链式调用多个中间操作。它们不会立即执行实际的计算,而是在终端操作被调用时才会“惰性求值”。
- 示例:
filter
、map
、sorted
等。例如上述代码中的filter
操作筛选出偶数,mapToInt
操作将偶数映射为其平方,这两个操作都是中间操作,它们只是对数据进行了定义如何处理的描述,并没有实际进行计算。
- 终端操作:
- 特点:执行实际的计算,并返回一个非流的结果(如
int
、long
、void
等)或触发流的处理。一旦终端操作执行,流就被“消耗”,不能再被使用。
- 示例:
sum
、forEach
、collect
等。上述代码中的sum
操作就是终端操作,它触发了前面中间操作定义的计算流程,最终返回所有偶数平方的和。