用速度排序地图

时间:2015-07-09 13:14:43

标签: sorting dictionary velocity

我成功地从xml文档中填充了一张地图。

现在我正在尝试软化地图。

任何人都知道如何做到这一点。

这是我的速度模板

#set ($root = $context.root)
#set ($nodes = $root.selectNodes("MedicalHIstoryResponse/MedicalResponses"))
#set ($container = {})

#foreach( $node in $nodes )
  #set($recordId = $!node.selectSingleNode("recordId/text()").getStringValue())
  #set($myHashMap = {
    "eventDate": $!node.selectSingleNode("EventDate/text()").getStringValue(),
    "eventType": $!node.selectSingleNode("EventType/text()").getStringValue(),
    "description": $!node.selectSingleNode("Description/text()").getStringValue(),
    "recordId": $recordId,
    "parentRecordId": $!node.selectSingleNode("parentRecordId/text()").getStringValue(),
    "noofAttachment": $!node.selectSingleNode("noofAttachment/text()").getStringValue(),
    "noofLinkFolder": $!node.selectSingleNode("noofLinkFolder/text()").getStringValue(),
    "hide": $!node.selectSingleNode("hide/text()").getStringValue(),
    "addedBy": $!node.selectSingleNode("addedBy/text()").getStringValue()
  })
  #set ($discard = $container.put($recordId, $myHashMap))
#end

#foreach($obj in $container)
  $obj
#end

2 个答案:

答案 0 :(得分:1)

您可以使用TreeMap而不是HashMap。它将按键排序条目。

你需要一个小工具来在VTL中创建空地图(或者你可以使用绝对丑陋的黑客:

#set($dummy="")
#set($container = $dummy.class.forName("java.util.TreeMap").newInstance())

至少用于测试目的)。

答案 1 :(得分:0)

快速解决方案:使用速度排序工具 - 文档here

#foreach($obj in $sorter.sort($container))
  $obj
#end

您需要使用

将排序工具添加到Velocity上下文中
VelocityContext velocityContext = new VelocityContext(variableMap);
// now add in the velocity tools required
velocityContext.put("sorter", new SortTool());

更好的解决方案:遵循MVC原则,并在Java代码中完成所有这些工作。除了其他好处之外,这还可以让您灵活地应用自定义排序顺序(Comparator)。请参阅我的其他SO回答here以获得完整的解释和理由。