2011-09-01 68 views
5

tôi có một danh sách với các yếu tố trùng lặp, tôi cần phải sử dụng vận tốcLàm thế nào để loại bỏ các yếu tố trùng lặp từ một danh sách sử dụng apache vận tốc

Ví dụ, bài viết chứa các yếu tố trùng lặp

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

Tôi muốn loại bỏ trùng lặp sử dụng vận tốc,

Bất kỳ trợ giúp nào sẽ được đánh giá là

+2

Những thứ như vậy cần được giải quyết ở phía bên java, Velocity không được thiết kế để xây dựng cấu trúc dữ liệu. – serg

Trả lời

1

Bạn không thể thực hiện điều đó theo tốc độ. Bạn phải cung cấp một mô hình không chứa bản sao. Cách dễ nhất là sử dụng new HashSet<Post>(postsList) - điều này sẽ loại bỏ các bản sao (dựa trên phương pháp equals(..))

Nếu bạn thực sự không thể chuyển mô hình phù hợp, bạn có thể thử xác định custom tool. , nhưng điều đó sẽ không dễ dàng.

0

Ngoài việc không thể thực hiện được trong Vận tốc, từ quan điểm kiến ​​trúc, điều bạn muốn không có ý nghĩa gì cả. Phần "loại bỏ các bản sao" là một số loại logic và điều này cần được thực hiện ở nơi thích hợp. Chế độ xem không phải là nơi thích hợp để thực hiện điều đó. Vì vậy, bạn nên làm điều đó bằng tất cả các phương tiện trong Java và thậm chí là hạnh phúc nó không thể trong Velocity.

Ngay cả khi vai trò của bạn không cho phép thay đổi mã Java, điều này vẫn phải được giải quyết bằng Java.

5

Chỉ vì lợi ích của cuộc tranh luận bởi vì những người khác nói rằng nó là không thể với Velocity, tôi muốn cho thấy rằng nó thực sự có thể với Velocity, nhưng vẫn không được khuyến khích.

Đối với những người quan tâm như thế nào nó có thể được thực hiện:

#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

Cảm ơn bạn rất nhiều, vấn đề được giải quyết – imby

+1

Nó thậm chí còn dễ dàng hơn với các phiên bản mới hơn, vì bạn có thể sử dụng phương thức 'contains' trong danh sách. vì vậy bạn chỉ có thể sử dụng một vòng lặp foreach duy nhất và thêm tất cả các đối tượng vào danh sách, chưa được chứa hoặc thậm chí bạn có thể sử dụng loại bản đồ velocit và lưu các phần tử dưới dạng khóa ;-) – Falco

3

này là có thể, và điều này sẽ làm việc tùy thuộc vào phiên bản của vận tốc. Một chút ngắn gọn hơn câu trả lời ở trên.

#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 
Các vấn đề liên quan