通用List工具類

List工具類

 

對任意List集合排序

 工具類

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

import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * @author ShanCong
 * @date 2018/10/23 20:26
 * @description:
 */
public class ListSortUtil {
    /**
     * @param targetList * 要排序的實體類List集合
     * @param sortField * 排序字段(實體類屬性名)
     * @param sortMode * true正序,false逆序
     */
    @SuppressWarnings("all")
    public static <T> void sort(List<T> targetList, final String sortField, final boolean sortMode) {
        if (targetList == null || targetList.size() < 2 || sortField == null || sortField.length() == 0) {
            return;
        }
        Collections.sort(targetList, new Comparator() {
            @Override
            public int compare(Object obj1, Object obj2) {
                int retVal = 0;
                try { // 獲取getXxx()方法名稱
                    String methodStr = "get" + sortField.substring(0, 1).toUpperCase() + sortField.substring(1);
                  //方法不存在會報NoSuchMethodException
                    Method method1 = ((T) obj1).getClass().getMethod(methodStr, null);
                    //System.out.println("method1 : "+method1);
                    Method method2 = ((T) obj2).getClass().getMethod(methodStr, null);
                   // System.out.println("method2 : "+method2);
                    if (sortMode) {
                        retVal = method1.invoke(((T) obj1), null).toString().compareTo(method2.invoke(((T) obj2), null).toString());
                    } else {
                        retVal = method2.invoke(((T) obj2), null).toString().compareTo(method1.invoke(((T) obj1), null).toString());
                    }
                } catch (Exception e) {
                    System.out.println("List<" + ((T) obj1).getClass().getName() + ">排序異常!");
                    e.printStackTrace();
                }
                return retVal;
            }
        });
    }

    /**
     * @describe 依據某個字段對集合進行排序
     * @author sc
     * @date 2013-1-22 下午3:44:47
     * @param list
     *            待排序的集合
     * @param fieldName
     *            依據這個字段進行排序
     * @param asc
     *            如果爲true,是正序;爲false,爲倒序
     */
    @SuppressWarnings("unchecked")
    public static <T> void sortList(List<T> list, String fieldName, boolean asc) {
        Comparator<?> mycmp = ComparableComparator.getInstance();
        // 允許null
        mycmp = ComparatorUtils.nullLowComparator(mycmp);
        if (!asc) {
            // 逆序
            mycmp = ComparatorUtils.reversedComparator(mycmp);
        }
        Collections.sort(list, new BeanComparator(fieldName, mycmp));
    }
}

實體


import java.util.Date;

/**
 * @author ShanCong
 * @date 2018/10/23 21:02
 * @description:
 */
public class Dog {
    private String name;

    private Date time;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getTime() {
        return time;
    }

    public void setTime(Date time) {
        this.time = time;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", time=" + time +
                '}';
    }
}

 測試

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author ShanCong
 * @date 2018/10/23 21:05
 * @description:
 */
public class ListSortMain {
    public static void main(String[] args) throws InterruptedException {
        List<Dog> dogList = new ArrayList<Dog>();
      /*  for (int i = 0; i < 5; i++) {
            Dog d = new Dog();
            d.setName("dog" + i);
            d.setTime(new Date());
            dogList.add(d);
            Thread.sleep(1000);
        }*/
        for (int i = 0; i < 5; i++) {
            if(i==0){
                Dog d = new Dog();
                d.setName("app_04_01");
                d.setTime(new Date());
                dogList.add(d);
                Thread.sleep(1000);
            }
            if(i==1){
                Dog d = new Dog();
                d.setName("app_03");
                d.setTime(new Date());
                dogList.add(d);
                Thread.sleep(1000);
            }
            if(i==2){
                Dog d = new Dog();
                d.setName("app_04");
                d.setTime(new Date());
                dogList.add(d);
                Thread.sleep(1000);
            }
            if(i==3){
                Dog d = new Dog();
                d.setName("app_02");
                d.setTime(new Date());
                dogList.add(d);
                Thread.sleep(1000);
            }
            if(i==4){
                Dog d = new Dog();
                d.setName("app_04_02");
                d.setTime(new Date());
                dogList.add(d);
                Thread.sleep(1000);
            }
            if(i==5){
                Dog d = new Dog();
                d.setName("app_03_01");
                d.setTime(new Date());
                dogList.add(d);
                Thread.sleep(1000);
            }

        }
        ArrayList<Integer> list = new ArrayList<Integer>();
        System.out.println("排序前:" );
        for(Dog d : dogList){
            System.out.println(d.getName());
        }
       // ListSortUtil.sort(dogList, "name", true);
        ListSortUtil.sortList(dogList, "name", true);
        System.out.println("按name正序排:");
        for(Dog d : dogList){
            System.out.println(d.getName());
        }
       /* ListSortUtil.sort(dogList, "name", false);
        System.out.println("按name逆序排:" + dogList.toString());
        ListSortUtil.sort(dogList, "time", true);
        System.out.println("按time正序排:" + dogList.toString());
        ListSortUtil.sort(dogList, "time", false);
        System.out.println("按time逆序排:" + dogList.toString());*/
    }


}

 

 

 

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