java排序集合拆分等常见操作

Map排序

按照key排序

   public static Map<String, String> sortMapByKey(Map<String, String> map) {
        if (map == null || map.isEmpty()) {
            return null;
        }

        Map<String, String> sortMap = new TreeMap<String, String>(
                new MapKeyComparator());

        sortMap.putAll(map);
        return sortMap;
    }

比较器实现

class MapKeyComparator implements Comparator<String>{
    @Override
    public int compare(String str1, String str2) {
        //默认是升序,加上-号是降序
        return str1.compareTo(str2);
    }
}

按照value排序

    // Map的value值降序排序
    public static <K, V extends Comparable<? super V>> Map<K, V> sortDescend(Map<K, V> map) {
        List<Map.Entry<K, V>> list = new ArrayList<>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<K, V>>() {
            @Override
            public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) {
                int compare = (o1.getValue()).compareTo(o2.getValue());
                return -compare;
            }
        });

        Map<K, V> returnMap = new LinkedHashMap<K, V>();
        for (Map.Entry<K, V> entry : list) {
            returnMap.put(entry.getKey(), entry.getValue());
        }
        return returnMap;
    }

List排序

   private void sortByTime(List<WeiboMsg> list){
        Collections.sort(list, new Comparator<WeiboMsg>() {

            @Override
            public int compare(WeiboMsg o1, WeiboMsg o2) {
                Date pubtime1 = o1.getPubtime();
                Date pubtime2 = o2.getPubtime();
                if (pubtime1.getTime() == pubtime2.getTime()) {
                    return 0;
                }else {
                    // 从小到大
                    return pubtime1.getTime() > pubtime2.getTime() ? 1 : -1 ;
                    // 如果需要从大到小,可以将return的值反过来即可
//                    return pubtime1.getTime() > pubtime2.getTime() ? -1 : 1 ;
                }
            }

        });
    }

List拆分

将一组数据平均分成n组

/**
 * 将一组数据平均分成n组
 *
 * @param source 要分组的数据源
 * @param n      平均分成n组
 * @param <T>
 * @return
 */
public static <T> List<List<T>> averageAssign(List<T> source, int n) {
    List<List<T>> result = new ArrayList<List<T>>();
    int remainder = source.size() % n;  //(先计算出余数)
    int number = source.size() / n;  //然后是商
    int offset = 0;//偏移量
    for (int i = 0; i < n; i++) {
        List<T> value = null;
        if (remainder > 0) {
            value = source.subList(i * number + offset, (i + 1) * number + offset + 1);
            remainder--;
            offset++;
        } else {
            value = source.subList(i * number + offset, (i + 1) * number + offset);
        }
        result.add(value);
    }
    return result;
}


 将一组数据固定分组,每组n个元素

/**
 * 将一组数据固定分组,每组n个元素
 * @param source 要分组的数据源
 * @param n      每组n个元素
 * @param <T>
 * @return
 */
public static <T> List<List<T>> fixedGrouping(List<T> source, int n) {

    if (null == source || source.size() == 0 || n <= 0)
        return null;
    List<List<T>> result = new ArrayList<List<T>>();

    int sourceSize = source.size();
    int size = (source.size() / n) + 1;
    for (int i = 0; i < size; i++) {
        List<T> subset = new ArrayList<T>();
        for (int j = i * n; j < (i + 1) * n; j++) {
            if (j < sourceSize) {
                subset.add(source.get(j));
            }
        }
        result.add(subset);
    }
    return result;
}

来源

Java Map 按Key排序和按Value排序 - Java Map - 开发语言与工具 - 深度开源

JAVA实现数据等分,一个List分成多个List_越努力越幸福的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/csdncjh/article/details/129763542
今日推荐