【问题标题】:How to sum every elements in a list of a list using stream?如何使用流对列表列表中的每个元素求和?
【发布时间】:2021-11-07 16:08:57
【问题描述】:

如何使用 Java 8 流对列表列表中的每个元素求和?

例如,我在一个列表中有 3 个不同的列表,我试图对每个列表中的每个元素求和并创建另一个列表。我是 Java 8 的新手,正在尝试使用 Stream API 解决一些问题:

List<List<Integer>> cases = Arrays.asList(
        Arrays.asList(1, 1, 2), 
        Arrays.asList(3, 3, 2), 
        Arrays.asList(4, 5, 1));

我想要达到的输出:

{[4,8,10]}

【问题讨论】:

    标签: java java-stream


    【解决方案1】:

    你可以这样做:

    List<List<Integer>> cases = Arrays.asList(Arrays.asList(1, 1, 2), Arrays.asList(3, 3, 2), Arrays.asList(4, 5, 1));
    
    List<Integer> result = cases.stream()
            .map(list -> list.stream().mapToInt(Integer::intValue).sum())
            .collect(Collectors.toList());
    
    System.out.println(result); // print [4, 8, 10]
    

    【讨论】:

      【解决方案2】:

      您可以使用Stream API 并减少内部列表以获取其元素的总和。

      演示:

      import java.util.List;
      import java.util.stream.Collectors;
      
      public class Main {
          public static void main(String[] args) {
              List<List<Integer>> cases = List.of(List.of(1, 1, 2), List.of(3, 3, 2), List.of(4, 5, 1));
              List<Integer> result = cases.stream()
                                          .map(e -> e.stream().reduce(0, Integer::sum))
                                          .collect(Collectors.toList());
              System.out.println(result);
          }
      }
      

      输出:

      [4, 8, 10]
      

      ONLINE DEMO

      【讨论】:

        猜你喜欢
        • 2018-09-17
        • 2014-06-09
        • 1970-01-01
        • 1970-01-01
        • 2012-07-05
        • 2016-11-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多