如何在 FreeMarker 中汇总数字列表

How to total a list of numbers in FreeMarker

我一直在浏览 documentation for FreeMarker,但找不到任何有关如何对列表中的值列表求和的示例。

假设我有以下 class,如何在末尾添加一行以包括值的总和:

public class MyObject
{
    List<long> values
}

然后我可以查看单个项目 as explained in the list directive

<#list MyObject.values as value>
  ${value}
</#list>

我什至可以找到 documentation on how to do arithmetic on the individual values 但我怎样才能添加一个新行来显示所有值的总和?换句话说,我找不到任何关于如何对数字列表求和的文档...

您还可以将 link 添加到文档中解释如何执行此操作的页面中吗?谢谢。

这是一个自定义函数。我只是用这个函数来平均一个数字列表并稍微改变它。

<#function mysum nums...>
  <#local sum = 0>
  <#list nums as num>
    <#local sum += num>
  </#list>
  <#if nums?size != 0>
    <#return sum>
  </#if>
</#function>
${mysum(10, 20)}
30

这是我获得平均列表的原始函数的地方: http://freemarker.org/docs/ref_directive_function.html(见示例 2)

如果您使用的是 Java 8,则有内置函数可以计算 List<Long> 的总和。如果将 List 转换为 Stream 再转换为 LongStream,则可以使用 .sum():

${MyObject.values.stream().mapToLong(Long::longValue).sum()}

例如,您可以在 this question 中看到这一点。