MST

星途 面试题库

面试题:Java中Stream API与Lambda表达式的基础应用

请使用Java的Stream API和Lambda表达式,从一个包含整数的List中筛选出所有偶数,并计算它们的平方和。同时,请解释Stream API的中间操作和终端操作的区别。
45.2万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
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的中间操作和终端操作的区别:

  1. 中间操作
    • 特点:返回一个新的流,允许链式调用多个中间操作。它们不会立即执行实际的计算,而是在终端操作被调用时才会“惰性求值”。
    • 示例filtermapsorted等。例如上述代码中的filter操作筛选出偶数,mapToInt操作将偶数映射为其平方,这两个操作都是中间操作,它们只是对数据进行了定义如何处理的描述,并没有实际进行计算。
  2. 终端操作
    • 特点:执行实际的计算,并返回一个非流的结果(如intlongvoid等)或触发流的处理。一旦终端操作执行,流就被“消耗”,不能再被使用。
    • 示例sumforEachcollect等。上述代码中的sum操作就是终端操作,它触发了前面中间操作定义的计算流程,最终返回所有偶数平方的和。