使用Comparator对List排序
阅读原文时间:2021年04月20日阅读:1

废话不多说,直接上代码。

UserVO.java

package com.lrb.sort.test;

import java.io.Serializable;

public class UserVO implements Serializable {
    private String userCde;
    private String userName;
    private int age;

    public UserVO(String userCde, String userName, int age) {
        super();
        this.userCde = userCde;
        this.userName = userName;
        this.age = age;
    }

    public String getUserCde() {
        return userCde;
    }
    public void setUserCde(String userCde) {
        this.userCde = userCde;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

**
UserComparator.java**

package com.lrb.sort.test;

import java.util.Comparator;

public class UserComparator implements Comparator {

    public int compare(Object o1, Object o2) {
        UserVO user1 = (UserVO) o1;
        UserVO user2 = (UserVO) o2;

        //首先比较用户编号,编号相同再比较名字,名字相同再比较年龄
        int flag1 = user1.getUserCde().compareToIgnoreCase(user2.getUserCde());
        if(flag1 == 0){
            int flag2 = user1.getUserName().compareToIgnoreCase(user2.getUserName());
            if(flag2 == 0){
                return user1.getAge()<=user2.getAge()?-1:1;
            }else{
                return flag2;
            }
        }else{
            return flag1;
        }
    }

}

ListContainsBeanSort.java

package com.lrb.sort.test;

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

public class ListContainsBeanSort {

    public static void main(String[] args) {
        List testArry = new ArrayList();

        //为要排序的集合添加测试数据
        testArry.add(new UserVO("000012","工商银行天津分行",22));
        testArry.add(new UserVO("000013","中国人发银行",23));
        testArry.add(new UserVO("000015","招商银行济南分行",23));
        testArry.add(new UserVO("00001801","招商银行高新区分行",23));
        testArry.add(new UserVO("000045","民生银行总行",23));
        testArry.add(new UserVO("00006709","民生银行济南分行",23));
        testArry.add(new UserVO("000011","工商银行济南分行",23));
        testArry.add(new UserVO("000012","工商银行天津分行",23));
        testArry.add(new UserVO("000012","聊城工商银行分行",23));


        //排序操作
        Collections.sort(testArry, new UserComparator());

        //展示排序后内容
        for(int i=0;i<testArry.size();i++){
            UserVO user = (UserVO) testArry.get(i);
            System.out.println(user.getUserCde()+"\t"+user.getUserName()+"\t"+user.getAge());
        }
    }
}

控制台打印排序后的结果:

000011 工商银行济南分行23
000012 工商银行天津分行22
000012 工商银行天津分行23
000012 聊城工商银行分行23
000013 中国人发银行 23
000015 招商银行济南分行23
00001801 招商银行高新区分行23
000045 民生银行总行 23
00006709 民生银行济南分行23