我正在寻找一种使用 Freemarker 根据数据项列表中的数据类型(int)生成分组报告的方法。
所以例如我有:
data.datatype = 1 where data has id = 1
data.datatype = 1 where data has id = 4
data.datatype = 1 where data has id = 7
data.datatype = 3 where data has id = 2
data.datatype = 3 where data has id = 3
data.datatype = 4 where data has id = 5
... and so on
序列按数据类型排序,但同时我需要将数据项保持在各自的顺序(二级排序顺序)。
我也在使用像函数这样的宏。理想情况下,我很想拥有
<#macro rendertable filteredDatatypelist datatype>
在过去,我确实调用了一个宏来根据当前数据类型呈现页眉、页脚和行,但我正试图摆脱它,并使用一个宏来为每种数据类型在子列表上呈现整个表。
也就是说,向宏发送数据类型的数据项列表。因此,例如在上面的数据中,我会调用
rendertable
宏 3 次,一次用于数据类型 1、3 和 4。
我看着尝试使用
filter
创建一个子列表,但这似乎是每个数据类型的 O(n) 的性能问题。不理想,但即使那样我也不确定它是如何工作的。 另请注意,我不知道有多少数据类型或它们的值可能是什么。我也查看了seq_index_of
和seq_last_index_of
但我再次不知道不同的数据类型是什么。 我考虑过先创建一个独特的数据类型列表,但我也不知道该怎么做。 换句话说,我什至不确定如何做类似的事情
<#assign dataForDataType = dataList?filter(data.datatype = 1)>
<#list dataForDataType as x>$<@renderTable x 1></#list>
除了在上面的情况下我对数据类型进行了硬编码并且它只适用于一种硬编码的数据类型。即使它是 O(n) 我认为我会接受它但问题是我不' 不知道如何为数据类型列表做这件事。任何有关如何实现这一目标的帮助将不胜感激。