当前位置: 首页 > 知识库问答 >
问题:

Java map/collect用于Stream to sum List of

庄弘业
2023-03-14

我使用的是Java8,以及从Java.util.Stream包中映射、还原、收集API。我有一个用例,其中我需要垂直求和列表列表。我的列表的结构是list > 我只是想不出有什么方法可以使用映射压缩内部列表,并减少或收集流上可用的操作。请考虑以下代码。假设我的列表名为transactions。此事务存储的是针对内部列表中的每个项目在每个事务中售出的项目数量。内部列表的长度对于所有交易都是相同的,因为它包含库存中每个项目的一个条目。如果事务中没有涉及该项目,则只存储0。

我在想一些关于

transaction.stream().map(
      /*Try and put sum into an accumulator List*/
).collect(
      /*Collect entries into a list*/
)

我只是想不出如何在代码中实现这一点。web上的所有资源都是不在集合对象上工作的微不足道的示例。如有任何指示/提示,将不胜感激。

共有1个答案

孔才
2023-03-14

因为您有一个列表 > ,垂直求和似乎应该产生一个列表 ,因为每列都有自己的求和。假设列表 > 中的每一行都包含相同数量的元素,那么最好先找到列表 > 的转置,对每一行求和,然后将其收集回列表 。您可以使用以下方法执行此操作:

List<List<Integer>> list = Arrays.asList(
    Arrays.asList(1, 2, 3, 4),
    Arrays.asList(5, 6, 7, 8)
);

List<Integer> sumList = IntStream.range(0, list.get(0).size())
                                 .mapToObj(i -> list.stream()
                                                    .mapToInt(l -> l.get(i))
                                                    .sum())
                                 .collect(Collectors.toList());

System.out.println(sumList);

输出:

[6, 8, 10, 12]
 类似资料:
  • 方法collect遍历集合,使用闭包作为变换器将每个元素转换为新值。 语法 (Syntax) List collect(Closure closure) 参数 (Parameters) Closure表达式。 返回值 (Return Value) 修改后的列表集合。 例子 (Example) 以下是每种方法使用此方法的示例 - class Example { static void mai

  • Collect - Illuminate Collections Deprecated: With the separation of Illuminate's Collections package, Collect is no longer necessary �� . We will maintain it for the 8.0 and 9.0 releases of Laravel fo

  • Os Collect Config 从定义配置源中收集数据,当元数据改变时就会运行一个定义的 hook。

  • 假设我有一个数组< code>movies = get_movies() 在ruby中,我经常做或一些事情。 在Java中,我能做些什么类似的事情?同样优雅,简洁和可读。我知道我有很多方法可以做到这一点,但如果有一个很好的方法来做到这一点,这将使我不想使用Groovy或其他东西让我知道。我相信Java有一些很棒的方法来做这样的事情。 这是我迄今为止使用TheMovieDB API Java包装器的

  • This extension features one additional builder, the CoverageBuilder. class sphinx.ext.coverage.CoverageBuilder To use this builder, activate the coverage extension in your configuration file and give

  • This extension features one additional builder, the To use this builder, activate the coverage extension in your configuration file and give -b coverage on the command line. Todo Write this section. S