java - Freemarker:创建一个表,其中包含列表中的列表

标签 java markdown freemarker

我目前有以下结构:

List<List<ClusterEntry>> clusters = new ArrayList<List<ClusterEntry>>();
//fill clusters and the list in clusters
input.put("clusters", clusters);

clusters 描述了我的集群,cluster.get(i) 包含一个集群中的所有元素。对于报告,我想使用 freemarker 将此结果输出到 .md 文件中。目标是拥有与簇一样多的列,并在每行中包含相应簇的条目。 我面临的问题是,我必须从外部列表开始,即集群:

|<#list clusters as c>  Cluster ${c_index} | </#list>
|<#list clusters as c>-----|</#list>

这是我使标题位于一行的解决方案。如果我这样做:

|<#list clusters as c>  Cluster ${c_index} | 
</#list>

我的输出将是每个集群 ${c_index} 的单独行

现在我为每个集群名称有一列,但如何填写相应行中的条目?我需要每个不同簇的条目在其相应的单独列中,但我不知道如何使用 freemarker 来实现这一点,如以下代码:

<#list clusters as c>  
<#list c as entry>| ${entry.id} |</#list> 
</#list> 

将导致一个簇的条目位于一行中,而下一个簇的条目位于下一行中。我想要这个,但是有列

最佳答案

如果我理解得很好,那么给出这个输入(使用 http://freemarker-online.kenshoo.com/ 语法):

clusters=[["a1", "b1", "c1"], ["a2"], ["a3", "b3"], ["a4", "b4", "c4"]]
maxEntities=3

你想要这个输出(我用填充使它变得更好了......如果你需要它,请使用 ?right_pad(n) ):

| Cluster 1 | Cluster 2 | Cluster 3 | Cluster 4 |
|---        |---        |---        |---        |
| a1        | a2        | a3        | a4        |
| b1        |           | b3        | b4        |
| c1        |           |           | c4        |

嗯,它不会很漂亮,因为您想在模板中旋转表格。但是,其想法是外循环遍历实体索引,内循环遍历集群。 (顶部还有两行特殊行,其中显示集群名称和标题分隔线。)

|<#list clusters as c> Cluster ${c?counter} <#sep>|</#list>|
|<#list clusters as c>--- <#sep>|</#list>|
<#list 0 ..< maxEntities as entityIndex>
|<#list clusters as c> ${c[entityIndex]!} <#sep>|</#list>|
</#list>

顺便说一句,maxEntities可以在模板中计算,如果这样更好:

<#function maxListItemSize items>
  <#local max = 0>
  <#list items as item>
    <#local size = item?size>
    <#if max < size>
      <#local max = size>
    </#if>
  </#list>
  <#return max>
</#function>

然后你就有了<#list 0 ..< maxListItemSize(clusters) as entityIndex> .

关于java - Freemarker:创建一个表,其中包含列表中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42758225/

相关文章:

java - 是否忽略了 HTTP 服务器 header 响应?

java - 如何在Spring框架中的Hibernate一对多关系中仅从父类获取json数据

java - 接下来的编辑文本字段遵循其自身

markdown - 如何在 Sublime Text Markdown 预览中启用 MathJax 渲染

git - 为什么要选择 ATX 或 SETEXT Markdown 标题样式?

r - 在RStudio中创建良好的有线输出

scala - 无法读取 Freemarker 模板中的对象值

java - 使用可比排序

java - 从 Spark Web 框架在 Freemarker 模板上呈现列表

java - 使自定义 TemplateMethodModel 在 Freemarker for Spring Boot 2 中可用