MST

星途 面试题库

面试题:Java中使用Stream collect方法进行简单数据批量运算

假设有一个List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); 请使用Java Stream的collect方法,计算这个列表中所有数字的平方和,并返回结果。
24.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

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

public class Main {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        int sumOfSquares = numbers.stream()
               .mapToInt(n -> n * n)
               .sum();
        System.out.println(sumOfSquares);
    }
}

如果非要用collect方法:

import java.util.Arrays;
import java.util.List;
import java.util.OptionalInt;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        OptionalInt sumOfSquares = numbers.stream()
               .map(n -> n * n)
               .collect(Collectors.summingInt(Integer::intValue));
        sumOfSquares.ifPresent(System.out::println);
    }
}

这里用OptionalInt是因为Collectors.summingInt返回的是OptionalInt,当流为空时会有不同行为。如果确定流不为空,也可以用更简洁的方式:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        int sumOfSquares = numbers.stream()
               .map(n -> n * n)
               .collect(Collectors.summingInt(Integer::intValue));
        System.out.println(sumOfSquares);
    }
}

最终答案(直接回答):

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Solution {
    public static int calculateSumOfSquares(List<Integer> numbers) {
        return numbers.stream()
               .map(n -> n * n)
               .collect(Collectors.summingInt(Integer::intValue));
    }

    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
        int result = calculateSumOfSquares(numbers);
        System.out.println(result);
    }
}

main方法中的System.out.println(result)仅用于测试,实际在面试题场景下,返回计算出的平方和result即可。核心代码是calculateSumOfSquares方法中的部分,即使用collect方法计算列表中所有数字平方和的代码:

return numbers.stream()
       .map(n -> n * n)
       .collect(Collectors.summingInt(Integer::intValue));