2017-06-01 42 views
0

我想通过release_date排序Iterable List 类Movie有一个日期release_date字段。排序Iterable List变量

为传单div th:每个...使最新的电影在最上面和最新的底部。 我已经找到了

${#lists.sort(movie) 

但是这不适合我工作..

这是可迭代:

Iterable<Movie> movie = movieDao.findAll(); 

电影类:

package com.miyava.movie.model; 

import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 
import javax.persistence.*; 

import org.hibernate.validator.constraints.Length; 
import org.springframework.data.jpa.datatables.mapping.DataTablesOutput; 

import com.fasterxml.jackson.annotation.JsonIdentityInfo; 
import com.fasterxml.jackson.annotation.JsonView; 
import com.fasterxml.jackson.annotation.ObjectIdGenerators; 
import com.miyava.auditing.AuditedEntity; 
import com.miyava.common.NotEmpty; 
import com.miyava.genres.model.Genres; 

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id") 
@Entity 
public class Movie 
    extends AuditedEntity 
    implements com.miyava.common.Entity<Long> { 

    @Column(name = "movie_id") 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @JsonView(DataTablesOutput.View.class) 
    private Long id; 

    @NotEmpty(message = "movie.messages.title_empty") 
    @Column(nullable = false, unique = false, length = 255) 
    @Length(max = 255, message = "common.message.data_to_long") 
    @JsonView(DataTablesOutput.View.class) 
    private String title; 

    @NotEmpty(message = "movie.messages.description_empty") 
    @Column(nullable = false, unique = false) 
    @Lob 
    @JsonView(DataTablesOutput.View.class) 
    private String overview; 

    @Column(nullable = true, unique = false) 
    @JsonView(DataTablesOutput.View.class) 
    private String short_Overview; 

    @NotEmpty(message = "movie.messages.poster_Path_empty") 
    @Column(nullable = false, unique = false, length = 255) 
    @Length(max = 255, message = "common.message.data_to_long") 
    @JsonView(DataTablesOutput.View.class) 
    private String poster_path; 

    @NotEmpty(message = "movie.messages.runtime_empty") 
    @Column(nullable = false, unique = false, length = 255) 
    @Length(max = 255, message = "common.message.data_to_long") 
    @JsonView(DataTablesOutput.View.class) 
    private String runtime; 

    @NotEmpty(message = "movie.messages.status_empty") 
    @Column(nullable = false, unique = false, length = 255) 
    @Length(max = 255, message = "common.message.data_to_long") 
    @JsonView(DataTablesOutput.View.class) 
    private String status; 

    @Column(unique = false, columnDefinition = "DATETIME", name = "release_date") 
    @JsonView(DataTablesOutput.View.class) 
    private Date release_date; 

    @ManyToMany(cascade = CascadeType.ALL, targetEntity = Genres.class) 
    @JoinTable(name = "movie_genres", joinColumns = @JoinColumn(name = "movie_id", referencedColumnName = "movie_id"), inverseJoinColumns = @JoinColumn(name = "genres_id", referencedColumnName = "genres_id")) 
    @JsonView(DataTablesOutput.View.class) 
    private List<Genres> genres; 

    @OneToMany(mappedBy = "movie") 
    private List<UserMovie> userMovie = new ArrayList<UserMovie>(); 

    public Movie() {} 

    public Movie(String title, String overview, String short_Overview, String status, Date release_date, List<Genres> genres) { 
     super(); 
     this.title = title; 
     this.overview = overview; 
     this.short_Overview = short_Overview; 
     this.status = status; 
     this.release_date = release_date; 
     this.genres = genres; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getShortOverview() { 
     return short_Overview; 
    } 

    public void setShortOverview(String short_Overview) { 
     this.short_Overview = short_Overview; 
    } 

    public String getOverview() { 
     return overview; 
    } 

    public void setOverview(String overview) { 
     this.overview = overview; 
    } 

    public String getPoster_path() { 
     return poster_path; 
    } 

    public void setPoster_path(String poster_path) { 
     this.poster_path = poster_path; 
    } 

    public String getRuntime() { 
     return runtime; 
    } 

    public void setRuntime(String runtime) { 
     this.runtime = runtime; 
    } 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 

    public Date getRelease_date() { 
     return release_date; 
    } 

    public void setRelease_date(Date release_date) { 
     this.release_date = release_date; 
    } 

    public List<Genres> getGenres() { 
     return genres; 
    } 

    public void setGenres(List<Genres> genres) { 
     this.genres = genres; 
    } 

    public List<UserMovie> getUserMovie() { 
     return userMovie; 
    } 

    public void setUserMovie(List<UserMovie> userMovie) { 
     this.userMovie = userMovie; 
    } 
} 
+0

进行排序,你可以使用'Comparable'在这个问题解释了Java端。 https://stackoverflow.com/questions/5927109/sort-objects-in-arraylist-by-date – yogidilip

+1

比较器可以帮助你。如果您已经尝试过比较器,请分享代码更多信息。此链接可帮助您。 https://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects-by-property/2784576#2784576 – Ajit

+0

你可以编程findAll()'返回数据的期望的顺序(使用ORDER BY在查询中)? –

回答

0

通常DAO回报列表而不是Iterable,但我不会质疑返回Iterable的原因。

1)这绝对不是一个好的做法,但你可以尝试做“instanceof”并且看到它Iterable实际上是List的一个实例。如果它被转换为List并在其上使用Collections.sort。不要忘记传递在电影release_dat中比较的自定义Comparable。

2)创建一个空列表,从你的迭代器中加载它,然后用你的比较器进行排序。

0

如果你想按thymeleaf排序,那么你必须实施Comparable。详细here

对于你的情况下面的事情要做,以工作${#lists.sort(movie)

  1. 实施Comparablepublic class Movie implements Comparable<Movie>
  2. 覆盖的compareTo方法。在你的情况下,它会像下面

    @Override public int compareTo(Movie o) { if (release_date.getTime() > o. release_date.getTime()) return 1; else if (release_date.getTime() < o. release_date.getTime()) return -1; else return 0; }

对于comparable,你可以得到例如here