java實體類集合按某字段排序方法

業務場景:
今天有個小需求,多個實體類的集合合併以後,按照實體類的某個屬性(時間)進行排序,自己寫的方法太蠢且複雜了,所以在網上找了方法,感覺還是比較簡潔有效的,現在記錄下來以備後用。

   package simpletest;

/**
 * 測試實體類
 * @author YuanReny1
 *
 */
public class User {
	private String name;
	private String birthDay;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getBirthDay() {
		return birthDay;
	}
	public void setBirthDay(String birthDay) {
		this.birthDay = birthDay;
	}
	public User(String name, String birthDay) {
		super();
		this.name = name;
		this.birthDay = birthDay;
	}
	
}
package simpletest;

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

import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.ComparatorUtils;
import org.apache.commons.collections.comparators.ComparableComparator;

public class ListSortTest {
    
	/**
	 * bean的集合按照指定bean的字段排序
	 * @param list 要排序的集合
	 * @param filedName 字段名稱
	 * @param ascFlag 是否升序
	 */
    public static void sort(List list, String filedName, boolean ascFlag) {
        if (list.size() == 0 || filedName.equals("")) {
            return;
        }
        Comparator<?> cmp = ComparableComparator.getInstance();
        if (ascFlag) {
            cmp = ComparatorUtils.nullLowComparator(cmp);
        } else {
            cmp = ComparatorUtils.reversedComparator(cmp);

        }
        Collections.sort(list, new BeanComparator(filedName, cmp));
    }
    
    static void test() {
    	List<User> list = new ArrayList<>();
    	list.add(new User("張三", "2020-02-01 16:00:01"));
        list.add(new User("李四", "2020-02-03 08:40:32"));
        list.add(new User("王五", "2020-02-01 09:33:32"));
        sort(list, "birthDay", false);
        for(User u : list) {
        	System.out.println(u.getName() + "-> " + u.getBirthDay());
        }
    }
    
	public static void main(String[] args) {
		test();
	}
}

預期結果:User的集合按照birthDay降序排序
執行結果:
在這裏插入圖片描述
OK

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章