如何使用Java 8 Stream对嵌套列表中每个子列表的元素求和
使用Java 8 Stream对嵌套列表的子列表分别求和
需求:对嵌套列表(列表的列表)中每个子列表的所有元素单独求和,最终生成存储各子列表和的新列表。
你提供的示例输入定义如下:
List<List<Integer>> cases = Arrays.asList( Arrays.asList(1, 1, 2), Arrays.asList(3, 3, 2), Arrays.asList(4, 5, 1));
预期输出的和列表为 [4, 8, 10]
实现代码
核心逻辑
仅需对流做映射+收集操作即可完成需求:
List<Integer> sumList = cases.stream() .map(subList -> subList.stream().mapToInt(Integer::intValue).sum()) .collect(Collectors.toList());
完整可运行示例
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class SubListSumTest { public static void main(String[] args) { List<List<Integer>> cases = Arrays.asList( Arrays.asList(1, 1, 2), Arrays.asList(3, 3, 2), Arrays.asList(4, 5, 1) ); List<Integer> sumList = cases.stream() .map(subList -> subList.stream().mapToInt(Integer::intValue).sum()) .collect(Collectors.toList()); // 输出结果:[4, 8, 10] System.out.println(sumList); } }
逻辑说明
- 外层通过
cases.stream()获取嵌套列表的流对象,流中每个元素是List<Integer>类型的子列表 - 通过
map()操作完成子列表到求和结果的转换:子列表先转成IntStream,直接调用sum()方法完成求和,相比手动遍历效率更高,也避免了自动拆箱的额外开销 - 最终通过
collect(Collectors.toList())将所有求和结果收集为新的整数列表
内容的提问来源于stack exchange,提问作者PixelCoder
相关产品推荐
相关产品推荐

