Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何按对象的日期对对象列表进行排序(java集合,List<;Object>;) private List movieItems=null; 公共列表getMovieItems(){ 最终int first=0; if(movieItems==null){ getPaginInfo(); movieItems=jpaController.findRange(新int[]{pagininfo.getFirstItem(),pagininfo.getFirstItem()+pagininfo.getBatchSize()}); Collections.sort(movieItems,newcomparator(){ 公共整数比较(对象o1、对象o2){ 日期d1=movieItems.get((Movie)o1.getMovieId()).getDate(); Date d2=movieItems.get((Movie)o2.getMovieId()).getDate(); 若(d1.在(d2)之前){ movieItems.set(1,(Movie)o1); 电影项目。设置(2,(电影)o2); } 先返回; } }); } 归还电影物品; }_Java_Sorting_Collections - Fatal编程技术网

如何按对象的日期对对象列表进行排序(java集合,List<;Object>;) private List movieItems=null; 公共列表getMovieItems(){ 最终int first=0; if(movieItems==null){ getPaginInfo(); movieItems=jpaController.findRange(新int[]{pagininfo.getFirstItem(),pagininfo.getFirstItem()+pagininfo.getBatchSize()}); Collections.sort(movieItems,newcomparator(){ 公共整数比较(对象o1、对象o2){ 日期d1=movieItems.get((Movie)o1.getMovieId()).getDate(); Date d2=movieItems.get((Movie)o2.getMovieId()).getDate(); 若(d1.在(d2)之前){ movieItems.set(1,(Movie)o1); 电影项目。设置(2,(电影)o2); } 先返回; } }); } 归还电影物品; }

如何按对象的日期对对象列表进行排序(java集合,List<;Object>;) private List movieItems=null; 公共列表getMovieItems(){ 最终int first=0; if(movieItems==null){ getPaginInfo(); movieItems=jpaController.findRange(新int[]{pagininfo.getFirstItem(),pagininfo.getFirstItem()+pagininfo.getBatchSize()}); Collections.sort(movieItems,newcomparator(){ 公共整数比较(对象o1、对象o2){ 日期d1=movieItems.get((Movie)o1.getMovieId()).getDate(); Date d2=movieItems.get((Movie)o2.getMovieId()).getDate(); 若(d1.在(d2)之前){ movieItems.set(1,(Movie)o1); 电影项目。设置(2,(电影)o2); } 先返回; } }); } 归还电影物品; },java,sorting,collections,Java,Sorting,Collections,jpaController将带回4部电影,并向我提供以下信息 java.lang.ArrayIndexOutOfBoundsException:数组索引超出范围:4 在java.util.Vector.get(Vector.java:694)处 entitybeans.jsf.peliculantroller$1.compare(peliculantroller.java:260) 位于java.util.Arrays.mergeSort(Arrays.java:1270) java.util.

jpaController将带回4部电影,并向我提供以下信息

java.lang.ArrayIndexOutOfBoundsException:数组索引超出范围:4 在java.util.Vector.get(Vector.java:694)处 entitybeans.jsf.peliculantroller$1.compare(peliculantroller.java:260) 位于java.util.Arrays.mergeSort(Arrays.java:1270) java.util.Arrays.sort(Arrays.java:1210)位于 java.util.Collections.sort(Collections.java:159)位于 entitybeans.jsf.peliculantroller.getPeliculaItems(peliculantroller.java:257) 位于的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) invoke(NativeMethodAccessorImpl.java:39) 在 reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 位于java.lang.reflect.Method.invoke(Method.java:597) javax.el.BeanELResolver.getValue(BeanELResolver.java:302)位于 getValue(CompositeELResolver.java:175) 在 FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72) 位于com.sun.el.parser.AstValue.getValue(AstValue.java:116) com.sun.el.parser.AstValue.getValue(AstValue.java:163)


您使用的比较器不正确

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;
}
Collections.sort(movieItems,newcomparator(){
公共整数比较(电影m1、电影m2){
返回m1.getDate().compareTo(m2.getDate());
}
});

在您的
compare
方法中,
o1
o2
已经是
movieItems
列表中的元素。所以,你应该这样做:

 Collections.sort(movieItems, new Comparator<Movie>(){
           public int compare (Movie m1, Movie m2){
               return m1.getDate().compareTo(m2.getDate());
           }
       });
Collections.sort(movieItems,newcomparator(){
公共整数比较(电影m1、电影m2){
返回m1.getDate().compareTo(m2.getDate());
}
});

请勿访问或修改
比较器中的集合。比较器只能用于确定哪个对象在另一个对象之前。要比较的两个对象作为参数提供

Date
本身是可比较的,因此,使用泛型:

Collections.sort(movieItems, new Comparator<Movie>() {
    public int compare(Movie m1, Movie m2) {
        return m1.getDate().compareTo(m2.getDate());
    }
});

我将添加Commons NullComparator以避免一些问题…

您可以使用以下方法:

private static final MovieComparator comparator = new MovieComparator();

在Java 8+中,它现在非常简单:

Collections.sort(list, org.joda.time.DateTimeComparator.getInstance());

但是,
movieItems
Movie
对象的列表,而不是
Date
对象我think@AdrienBe,我想你是对的。普华永道,请在你的答案中包含阿德里安的建议。我使用这个代码工作正常。我需要从arraylist获取两个日期(开始、结束)之间的数据。我如何更改代码?Joda是一个需要导入的大型框架,因此除非您使用框架中的更多函数,否则我不建议使用此方法。太棒了!谢谢java8和@bphilipnyc!
Collections.sort(list, org.joda.time.DateTimeComparator.getInstance());
movieItems.sort(Comparator.comparing(Movie::getDate));