面试题答案
一键面试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));