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的命令式的写法更优雅和易懂

    评论

报告相同问题?

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办