Comment trier une liste d'objets par leur date (collections java, Liste & lt; Object & gt;)
private List<Movie> movieItems = null;
public List<Movie> getMovieItems() {
final int first = 0;
if (movieItems == null) {
getPagingInfo();
movieItems = jpaController.findRange(new int[]{pagingInfo.getFirstItem(), pagingInfo.getFirstItem() + pagingInfo.getBatchSize()});
Collections.sort(movieItems, new Comparator(){
public int compare (Object o1, Object o2){
Date d1 = movieItems.get(((Movie)o1).getMovieId()).getDate();
Date d2 = movieItems.get(((Movie)o2).getMovieId()).getDate();
if(d1.before(d2)){
movieItems.set(1, (Movie)o1);
movieItems.set(2, (Movie)o2);
}
return first;
}
});
}
return movieItems;
}
jpaController est de ramener des 4 films et de me donner la suite de
java.lang.ArrayIndexOutOfBoundsException: Tableau d'index out of range: 4
à java.util.Vecteur.get(Vecteur.java:694) à
entitybeans.jsf.PeliculaController$1.comparer(PeliculaController.java:260)
à java.util.Les tableaux de.mergeSort(Tableaux.java:1270) à
java.util.Les tableaux de.de tri(des Tableaux.java:1210) à
java.util.Les Collections.de tri(Collections.java:159)
entitybeans.jsf.PeliculaController.getPeliculaItems(PeliculaController.java:257)
au coucher du soleil.de réfléchir.NativeMethodAccessorImpl.invoke0(Native method) at
soleil.de réfléchir.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
au
soleil.de réfléchir.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
à java.lang.de réfléchir.La méthode.invoke(la Méthode.java:597) à
javax.el.BeanELResolver.getValue(BeanELResolver.java:302) à
javax.el.CompositeELResolver.getValue(CompositeELResolver.java:175)
au
com.soleil.des visages.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
au com.soleil.el.analyseur.AstValue.getValue(AstValue.java:116)
com.soleil.el.analyseur.AstValue.getValue(AstValue.java:163)....
source d'informationauteur Ignacio Garat | 2011-03-05
Vous devez vous connecter pour publier un commentaire.
Dans votre
compare
méthode,o1
eto2
sont déjà des éléments dans lemovieItems
liste. Donc, vous devriez faire quelque chose comme ceci:Ne pas accéder ou modifier la collection dans la
Comparator
. Le comparateur doit uniquement être utilisée pour déterminer quel objet est vient avant l'autre. Les deux objets à comparer sont fournis en tant qu'arguments.Date
lui-même est comparable, donc, l'utilisation de génériques:Et de ne pas instancier le comparateur de chaque sorte. Utilisation:
Dans Java 8, il est maintenant aussi simple que:
Vous utilisez
Comparators
de manière incorrecte.J'ajouterais Communes NullComparator au lieu d'éviter certains problèmes...
Vous pouvez utiliser ceci: