将集合中对象,根据某个属性值排序utils

所需jar包

    <!--对象,json相互转化-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.6</version>
    </dependency>

ListSortUtils

package com.utils;

import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.Collator;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.Map;

/**
 * List按照指定字段排序工具类.
 * 
 * @param <T>
 */

public class ListSortUtils<T> {

    /**
     * 对List<Obj>里的数字排序.
     * 
     * @param targetList
     *            目标排序List
     * @param sortField
     *            排序字段(实体类属性名)
     * @param sortMode
     *            排序方式(asc or desc)
     */
    public void ListObjSortByNum(List<T> targetList, final String sortField, final String sortMode) {
        Collections.sort(targetList, new Comparator<T>() {
            public int compare(Object obj1, Object obj2) {
                String o1 = getFieldValueByName(sortField, obj1) + "";
                String o2 = getFieldValueByName(sortField, obj2) + "";
                if (sortMode != null && "desc".equals(sortMode)) {
                    return ParseUtils.objToBigDecimal(o2).compareTo(ParseUtils.objToBigDecimal(o1)); // 倒序
                } else {
                    return ParseUtils.objToBigDecimal(o1).compareTo(ParseUtils.objToBigDecimal(o2)); // 正序
                }
            }
        });
    }

    /**
     * 对List<Map>里的数字排序.
     * 
     * @param list
     *            目标list
     * @param key
     *            排序字段
     * @param sortMode
     *            排序方式(asc or desc)
     * @throws Exception
     *             异常
     */
    public static void listMapSortByNum(List<Map<String, Object>> list, final String key, final String sortMode)
            throws Exception {
        // list是需要排序的list,其内放的是Map
        // 返回的结果集
        Collections.sort(list, new Comparator<Map<String, Object>>() {
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                // o1,o2是list中的Map,可以在其内取得值,按其排序,此例为升序,s1和s2是排序字段值
                BigDecimal s1 = new BigDecimal(o1.get(key) + "");
                BigDecimal s2 = new BigDecimal(o2.get(key) + "");
                if (sortMode != null && "desc".equals(sortMode)) {
                    return s2.compareTo(s1);
                } else {
                    return s1.compareTo(s2);
                }
            }
        });
    }

    /**
     * 对List<Obj>中文排序.
     * 
     * @param targetList
     *            目标list
     * @param sortField
     *            排序字段
     * @param sortMode
     *            排序方式(asc or desc)
     */
    public void ListObjSortByChina(List<T> targetList, final String sortField, final String sortMode) {
        Collections.sort(targetList, new Comparator<T>() {
            public int compare(Object obj1, Object obj2) {

                Collator instance = Collator.getInstance(Locale.CHINA);
                String o1 = getFieldValueByName(sortField, obj1) + "";
                String o2 = getFieldValueByName(sortField, obj2) + "";
                if (sortMode != null && "desc".equals(sortMode)) {
                    // 倒序
                    return instance.compare(o2, o1);
                } else {
                    return instance.compare(o1, o2);
                }
            }
        });
    }

    /**
     * 根据名称获取值.
     * 
     * @param fieldName
     *            名称
     * @param o
     *            对象
     * @return 值
     */
    private static Object getFieldValueByName(String fieldName, Object o) {
        try {
            String firstLetter = fieldName.substring(0, 1).toUpperCase();
            String getter = "get" + firstLetter + fieldName.substring(1);
            Method method = o.getClass().getMethod(getter, new Class[] {});
            Object value = method.invoke(o, new Object[] {});
            return value;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

转换类ParseUtils

package com.utils;

import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.util.StringUtils;

import com.alibaba.fastjson.JSON;

/**
 * 转换工具类.
 *
 * Apr 4, 2018 4:39:29 PM
 *
 */
public class ParseUtils {

    /**
     * Object转Long.
     * 
     * @param Object
     *            Object
     * @return Long
     */
    public static Long objToLong(Object obj) {
        if (obj != null)
            return Long.parseLong(obj.toString());
        else
            return null;
    }

    /**
     * Object转Integer.
     * 
     * @param Object
     *            Object
     * @return Integer
     */
    public static Integer objToInteger(Object obj) {
        if (obj != null)
            return Integer.parseInt(obj.toString());
        else
            return null;
    }

    /**
     * Object转BigDecimal.
     * 
     * @param Object
     *            Object
     * @return BigDecimal
     */
    public static BigDecimal objToBigDecimal(Object obj) {
        if (obj != null && !"".equals(obj))
            return new BigDecimal(obj.toString());
        else
            return null;
    }

    /**
     * Object转String.
     * 
     * @param Object
     *            Object
     * @return String
     */
    public static String objToString(Object obj) {
        if (obj != null)
            return obj.toString();
        else
            return null;
    }

    /**
     * String转Date,返回格式yyyy-MM-dd.
     * 
     * @param String
     *            String
     * @return Date
     */
    public static Date strToDate(String dateString) {
        if (StringUtils.isEmpty(dateString)) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = sdf.parse(dateString);
            return date;
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }

    /**
     * Object转Boolean.
     * 
     * @param Object
     *            Object
     * @return Boolean
     */
    public static Boolean objToBoolean(Object obj) {
        return (Boolean) obj;
    }

    /**
     * json转list.
     * 
     * @param json
     *            json
     * @return list
     */
    public static List<Map<String, Object>> jsonToList(String arr) {
        List<Map<String, Object>> returnList = new ArrayList<Map<String, Object>>();
        com.alibaba.fastjson.JSONArray mainArray = JSON.parseArray(arr);
        for (int i = 0; i < mainArray.size(); i++) {
            com.alibaba.fastjson.JSONArray paramObject = (com.alibaba.fastjson.JSONArray) mainArray.get(i);
            Map<String, Object> map = new HashMap<String, Object>();
            for (int j = 0; j < paramObject.size(); j++) {
                map.put("" + j, paramObject.get(j));
            }
            returnList.add(map);
        }
        return returnList;
    }
    
    /**
     * 全角转半角.
     * 
     * @param str
     * @return
     */
    public static final String toSingleByte(String str) {
        StringBuffer outStrBuf = new StringBuffer("");

        String Tstr = "";
        for (int i = 0; i < str.length(); i++) {
            Tstr = str.substring(i, i + 1);
            // 全角空格转换成半角空格
            if (Tstr.equals(" ")) {
                outStrBuf.append(" ");
                continue;
            }
            outStrBuf.append(Tstr);
        } // end for.
        
        return outStrBuf.toString();
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_43832604/article/details/88867301