2011-09-01 8 views
5

Ho una lista con gli elementi duplicati, ho bisogno di usare la velocitàCome rimuovere gli elementi duplicati da una lista utilizzando velocità di apache

per esempio, i messaggi contiene elementi duplicati

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

voglio togliere il duplicato utilizzando la velocità,

Qualsiasi aiuto sarebbe apprezzato

+2

Queste cose dovrebbero essere risolte sul lato java, Velocity non è stato progettato per costruire strutture di dati. – serg

risposta

1

non si può fare che in velocità. Devi fornire un modello che non contenga duplicati. Il modo più semplice è quello di utilizzare new HashSet<Post>(postsList) - questo sarà eliminare i duplicati (in base al metodo equals(..))

Se davvero non si può passare il modello corretto, si può provare a definire un custom tool che prende una lista e restituisce un set ma non sarebbe facile

0

Oltre a non essere possibile in Velocity, da un punto di vista architettonico ciò che si desidera non ha alcun senso. La parte "rimozione di duplicati" è una sorta di logica e questo deve essere curato nel posto giusto. Una visione non è il posto giusto per farlo. Quindi dovresti farlo con tutti i mezzi in Java e persino essere felice che non sia possibile in Velocity.

Anche se il tuo ruolo non consente di modificare il codice Java, questo deve ancora essere risolto in Java.

5

Solo per ragioni perché gli altri hanno detto che non è possibile con Velocity, volevo mostrare che è effettivamente possibile con Velocity, ma ancora non raccomandato.

Per coloro che sono interessati come potrebbe essere fatto:

#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

Grazie mille, il problema è risolto – imby

+1

È ancora più semplice con le versioni più recenti, dal momento che è possibile utilizzare il metodo "contiene" nell'elenco. quindi puoi semplicemente usare un singolo ciclo foreach e aggiungere tutti gli oggetti a un elenco, che non sono già contenuti, oppure puoi anche usare il tipo di mappa di velocità e salvare gli elementi come chiavi ;-) – Falco

3

Questo è possibile, e questo dovrebbe funzionare a seconda della versione della velocità. Un po 'più conciso rispetto alla risposta sopra.

#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 
Problemi correlati