如何使用apache velocity从列表中删除重复的元素

时间:2011-09-01 21:12:55

标签: java velocity

我有一个包含重复元素的列表,我需要使用velocity

例如,帖子包含重复的元素

#foreach ($p in $posts)
  $p.name //will be unique
#end

我想使用velocity删除副本,

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:5)

仅仅是为了争论,因为其他人说使用Velocity是不可能的,我想表明它实际上可以用Velocity,但仍然不推荐。

对于那些有兴趣如何做的人:

#set($uniquePosts = [])
#foreach($post in $posts) 
    #set($exists = false)
    #foreach($uniquePost in $uniquePosts)
        #if($uniquePost.name == $post.name)
            #set($exists = true)
            #break
        #end
    #end

    #if(!$exists)
        #set($added = $uniquePosts.add($post))
    #end

    #set($posts = $uniquePosts)
#end

Unique list:
#foreach($post in $posts)
    $post.name
#end

答案 1 :(得分:1)

你无法在速度方面做到这一点。您必须提供不包含重复项的模型。最简单的方法是使用new HashSet<Post>(postsList) - 这将消除重复项(基于equals(..)方法)

如果你真的无法传递正确的模型,你可以尝试定义一个custom tool来获取一个列表并返回一个集合,但这并不容易。

答案 2 :(得分:0)

除了在Velocity中不可能之外,从架构的角度来看,你想要的东西根本没有意义。 “删除重复”部分是某种逻辑,需要在适当的地方进行处理。视图不适合这样做。所以你应该在Java中尽一切办法,甚至在Velocity中也不可能。

即使您的角色不允许更改Java代码,仍必须使用Java解决此问题。