You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Freemarker中访问HashMap指定键值?含代码示例及输出需求

问题1:单独访问特定键(如"two")的值

在FreeMarker中,你可以直接通过两种方式访问hello这个Map里的特定键值:

  • 点语法:这是最简洁的写法,直接用.连接Map名称和键名:

    ${hello.two}
    

    执行后会输出ABC。

  • 方括号语法:如果键名包含特殊字符或者是变量时更适用,这里也可以用:

    ${hello["two"]}
    

    同样会输出ABC。


问题2:修正循环代码生成预期输出

首先要注意:普通HashMap是无序的,迭代键的顺序不一定和你插入的顺序一致。如果需要固定顺序(比如按one→two→three的顺序输出),建议在Java代码里把HashMap换成LinkedHashMap,它会保留插入顺序。

接下来修正循环代码,要实现{key-value-1} {key-value-2} {key-value-3} #define ABC 3的输出,我们可以分两部分处理:

完整修正后的代码:

<#-- 第一部分:输出带序号的key-value标记 -->
<#list hello?keys as key>
  {key-value-${key_index + 1}}<#if key_has_next> </#if>
</#list>
<#-- 第二部分:输出所有值,用空格分隔 -->
${hello?values?join(" ")}

代码解释:

  1. key_index + 1:FreeMarker的list变量自带index属性(从0开始),加1后得到从1开始的序号。
  2. <#if key_has_next> </#if>:用来在元素之间添加空格,避免最后一个元素后面多出空格。
  3. hello?values?join(" "):直接获取Map的所有值组成的序列,然后用空格连接起来,比再次循环更简洁。

如果你坚持用两次循环的方式(和第一部分结构一致),也可以写成:

<#-- 输出带序号的标记 -->
<#list hello?keys as key>
  {key-value-${key_index + 1}}<#if key_has_next> </#if>
</#list>
<#-- 输出每个值 -->
<#list hello?keys as key>
  ${hello[key]}<#if key_has_next> </#if>
</#list>

你原来的代码错误在于循环时硬编码了hello["two"],导致每次都输出同一个值,正确的应该是用当前循环的key来获取对应的值:${hello[key]}。


内容的提问来源于stack exchange,提问作者Vili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 17:12:45