2017-06-01 7 views
0

ich möchte die Iterable-Liste nach Release-Datum sortieren Die Klasse Movie hat ein Date release_date-Feld.Iterable-List-Variable sortieren

für die Broschüre div th: jeder ..., so dass die neuesten Filme an der Spitze und die neuesten auf der Unterseite. ich habe die

${#lists.sort(movie) 

gefunden, aber nicht für mich arbeiten ..

ist dies die Iterable:

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

der Film Klasse:

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

sortieren auf der Java-Seite erhalten Sie einen 'Comparable' wie in dieser Frage erklärt verwenden können. https://stackoverflow.com/questions/5927109/sort-objects-in-arraylist-by-date – yogidilip

+1

Comparator hilft Ihnen dabei. Wenn Sie Comparator bereits versucht haben, teilen Sie bitte den Code mehr Informationen. Dieser Link hilft Ihnen. https://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects-by-property/2784576#2784576 – Ajit

+0

Kannst du 'findAll()' programmieren, um die Daten in der gewünschten Reihenfolge (mit ORDER BY in der Abfrage)? –

Antwort

0

Normalerweise kehrt DAO Liste statt Iterable, aber ich werde keinen Grund zur Rückkehr Iterable in Frage stellen.

1) Dies ist definitiv keine gute Praxis, aber Sie können versuchen, "instanceof" zu tun und es zu sehen Iterable ist eigentlich eine Instanz von List. Wenn es dann in List umgewandelt wird, verwenden Sie Collections.sort. Vergessen Sie nicht, benutzerdefinierte Vergleiche zu übergeben, die in Movie release_dat vergleichbar sind.

2) Erstellen Sie eine leere Liste, laden Sie sie von Ihrem Iterator und machen Sie dann die Sortierung mit Ihnen Komparator.

0

Wenn Sie nach Thymolblatt sortieren möchten, müssen Sie Comparable implementieren. Details here

Für Ihren Fall folgende Dinge zu tun, die ${#lists.sort(movie)

  1. Comparable wie public class Movie implements Comparable<Movie>
  2. Aufschalten der compareTo Methode implementieren zu arbeiten. In Ihrem Fall wäre es wie folgt sein

    @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; }

Für comparable können Sie beispielsweise here