csdnzlw 2016-04-18 06:16 采纳率: 0%
浏览 6625

java 如何对 list 对象降序排列

package test.tool.gui.dbtool.util;  

import java.util.ArrayList;  
import java.util.Collections;  
import java.util.Comparator;  
import java.util.List;  

public class Test {  

    public static void main(String[] args) {  

        List<Student> list = new ArrayList<Student>();  

        //创建3个学生对象,年龄分别是20、19、21,并将他们依次放入List中  
        Student s1 = new Student();  
        s1.setAge(20);  
        Student s2 = new Student();  
        s2.setAge(19);  
        Student s3 = new Student();  
        s3.setAge(21);  
        list.add(s1);  
        list.add(s2);  
        list.add(s3);  

        System.out.println("排序前:"+list);  

        Collections.sort(list, new Comparator<Student>(){  

            /*  
             * int compare(Student o1, Student o2) 返回一个基本类型的整型,  
             * 返回负数表示:o1 小于o2,  
             * 返回0 表示:o1和o2相等,  
             * 返回正数表示:o1大于o2。  
             */  
            public int compare(Student o1, Student o2) {  

                //按照学生的年龄进行升序排列  
                if(o1.getAge() > o2.getAge()){  
                    return 1;  
                }  
                if(o1.getAge() == o2.getAge()){  
                    return 0;  
                }  
                return -1;  
            }  
        });   
        System.out.println("排序后:"+list);  
    }  
}  
class Student{  

    private int age;  

    public int getAge() {  
        return age;  
    }  

    public void setAge(int age) {  
        this.age = age;  
    }  
    @Override  
    public String toString() {  
        return getAge()+"";  
    }  
}  

    如何对上面代码按年龄降序排列。
  • 写回答

4条回答

  • 爱吃芒果的程序猿 2016-04-19 09:31
    关注

    集合排序问题,建议用Java的Stream来处理,是非常方便的,题主可以试试
    我直接使用你创建好的list为例举例以下代码:

    list = list.stream().sorted(Comparator.comparing(Student::getAge).reversed()).collect(Collectors.toList());

    排序就完成了,代码是很简答,很优雅的
    解释一下
    list.stream(): 是把list集合转化为stream集合
    sorted(): 进行排序,其中Comparator.comparing(Student::getAge)表示按照年纪排序,.reversed()表示是逆序,因为默认情况下,不加.reversed 是升序的
    collect(Collectors.toList()): 再次将排序后的stream集合转化为list集合

    其实不用解释,这一行代码的逻辑也是很清楚的,建议题主可以看看Java的新特性Stream,可能会对你有很大帮助,这种声明式的写法比原始的Java的命令式的写法更优雅和易懂

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?