2011-09-01 22 views
5

Mam listę ze zduplikowanych elementów, muszę korzystać z prędkościąJak usunąć zduplikowane elementy z listy za pomocą apache prędkość

na przykład stanowisk zawiera zduplikowane elementy

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

Chcę usunąć powielać stosując prędkość,

Każda pomoc będzie mile widziane

+2

Takie rzeczy powinny być rozwiązane po stronie Java, Velocity nie została zaprojektowana do konstruowania struktur danych. – serg

Odpowiedz

1

nie można tego zrobić w prędkości. Musisz podać model, który nie zawiera żadnych duplikatów. Najprostszym sposobem jest użycie new HashSet<Post>(postsList) - to wyeliminować duplikaty (w oparciu o metodę equals(..))

Jeśli naprawdę nie można zdać odpowiedni model, można próbować określić custom tool która pobiera listę i zwraca zestaw , ale to nie byłoby łatwe.

0

Oprócz tego, że nie jest to możliwe w Velocity, z architektonicznego punktu widzenia to, czego chcesz, nie ma sensu. Część "usuwanie duplikatów" jest jakąś logiką, którą należy zająć we właściwym miejscu. Widok nie jest właściwym miejscem do robienia tego. Powinieneś zrobić to na wszelkie sposoby w Javie, a nawet być szczęśliwym, że nie jest to możliwe w Velocity.

Nawet jeśli twoja rola nie pozwala na zmianę kodu Java, to nadal musi być rozwiązana w Javie.

5

Dla samego argumentu, ponieważ inni mówili, że nie jest to możliwe z Velocity, chciałem pokazać, że jest to faktycznie możliwe z Velocity, ale nadal nie jest zalecane.

Dla tych, którzy są zainteresowani, w jaki sposób można to zrobić:

#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 
+0

Dziękuję bardzo, problem jest rozwiązany – imby

+1

Jest to jeszcze łatwiejsze w nowszych wersjach, ponieważ można użyć metody "zawiera" na liście. więc możesz po prostu użyć jednej pętli foreach i dodać wszystkie obiekty do listy, które nie są już zawarte, lub możesz nawet użyć typu mapy velocit i zapisać elementy jako klucze ;-) – Falco

3

Jest to możliwe, i to powinno działać w zależności od wersji prędkością. Trochę bardziej zwięzły niż powyższa odpowiedź.

#set($uniquePosts = []) 
#foreach($post in $posts) 
    #if(! $uniquePosts.contains($post.name) ) 
     #if($uniquePosts.add($post.name)) #end 
     ##note the if above is to trap a "true" return - may not be required 
     $post.name 
    #end 
#end 
Powiązane problemy