我想通过release_date对Iterable List进行排序 类Movie有一个Date release_date字段。
传单的第二部分:每个...以便最新的电影在最顶层,最新的电影在底部。 我找到了${#lists.sort(movie)
但这对我不起作用..
这是Iterable:
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 :(得分:0)
通常DAO返回List而不是Iterable,但我不会质疑返回Iterable的原因。
1)这绝对不是一个好习惯,但你可以尝试做“instanceof”并看到它Iterable实际上是List的一个实例。如果它然后被强制转换为List并在其上使用Collections.sort。不要忘记传递在电影release_dat中比较的自定义Comparable。
2)创建一个空列表,从迭代器中加载它,然后用比较器进行排序。
答案 1 :(得分:0)
如果您想按百里叶排序,那么您必须实施Comparable
。详情here
对于您的案例,请遵循${#lists.sort(movie)
Comparable
public class Movie implements Comparable<Movie>
覆盖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