A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yu244934256 中级黑马   /  2016-10-16 14:14  /  769 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 yu244934256 于 2016-10-16 14:18 编辑

    今天有个作业是这样的:对本班所有名字按姓氏个数降序排序。{:2_44:}
[AppleScript] 纯文本查看 复制代码
/**
     * @desc Map<Character, Integer> 按值排序
     * @param m Map集合
     * @param flag 默认为true is asc,false is desc
     * @return ArrayList<Entry<Character,Integer>> ctrl+1 返回类型+返回引用名
     * 
     * @author purity 2016-10-16下午1:51:01
     */
    public static ArrayList<Entry<Character, Integer>> sortMapValueByList(Map<Character, Integer> m, final boolean flag) {
        ArrayList<Entry<Character, Integer>> al = new ArrayList<Entry<Character, Integer>>(m.entrySet());
        // Java.lang.IllegalArgumentException: Comparison method violates its
        // general contract! jdk7的排序变了,设置以前的排序方式
        System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");
        Collections.sort(al, new Comparator<Entry<Character, Integer>>() {
            @Override
            public int compare(Entry<Character, Integer> lhs, Entry<Character, Integer> rhs) {
                int num = lhs.getValue() - rhs.getValue();
                if (flag) {
                    return num == 0 ? 1 : num;
                } else {
                    return num == 0 ? 1 : -num;
                }
            }
        });
        return al;
    }

    /**
     * @desc Map<Character, Integer> 按值排序
     * @param m Map集合
     * @param flag 默认为true is asc,false is desc
     * @return ArrayList<Entry<Character,Integer>> ctrl+1 返回类型+返回引用名
     * 
     * @author purity 2016-10-16下午1:51:01
     */
    public static ArrayList<Map.Entry<Character, Integer>> sortMapValue(TreeMap<Character, Integer> tm,
            final boolean flag) {
        ArrayList<Map.Entry<Character, Integer>> al = new ArrayList<Entry<Character, Integer>>(tm.entrySet());
        Collections.sort(al, new Comparator<Map.Entry<Character, Integer>>() {

            @Override
            public int compare(Entry<Character, Integer> lhs, Entry<Character, Integer> rhs) {
                if (flag) {
                    return lhs.getValue().compareTo(rhs.getValue()); // 可以直接比较
                } else {
                    return rhs.getValue().compareTo(lhs.getValue());
                }
            }
        });
        return al;
    }

    /**
     * @desc Map<Character, Integer> 按值排序
     * @param m Map集合
     * @param flag 默认为true is asc,false is desc
     * @return TreeSet<Entry<Character,Integer>> ctrl+1 返回类型+返回引用名
     * 
     * @author purity 2016-10-16下午2:12:17
     */
    public static TreeSet<Entry<Character, Integer>> sortMapValueBySet(Map<Character, Integer> m, final boolean flag) {
        TreeSet<Entry<Character, Integer>> ts = new TreeSet<Entry<Character, Integer>>(
                new Comparator<Entry<Character, Integer>>() {

                    @Override
                    public int compare(Entry<Character, Integer> lhs, Entry<Character, Integer> rhs) {
                        int num = lhs.getValue() - rhs.getValue(); // 用compareTo会排除重复
                        if (flag) {
                            return num == 0 ? 1 : num;
                        } else {
                            return num == 0 ? 1 : -num;
                        }
                    }
                });
        ts.addAll(m.entrySet());
        return ts;
    }

评分

参与人数 1黑马币 +5 收起 理由
peng33584 + 5

查看全部评分

1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马