zoukankan      html  css  js  c++  java
  • Comparator 排序

    例1:

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;
    
    public class Test {
        public static void main(String[] args) {
            Map<String, Integer> m = new HashMap<String, Integer>();
            m.put("a", 1);
            m.put("b", 1);
            m.put("c", 2);
            m.put("d", 3);
            System.out.println(getFristEntryOfSortedMap(m, true));
            System.out.println(getFristEntryOfSortedMap(m, false));
        }
    
        /**
         * 通过map 的 value 排序,并返回排序后的第一个条目
         * 
         * @param m
         *            待排序集合
         * @param desc
         *            true:降序排序,false:升序排序
         * @return 返回排序后的第一个条目
         */
        public static Entry<String, Integer> getFristEntryOfSortedMap(Map<String, Integer> m, boolean desc) {
    
            if (m == null || m.isEmpty()) {
                throw new IllegalArgumentException("map is null or empty");
            }
            Set<Entry<String, Integer>> entrySet = m.entrySet();
            Iterator<Entry<String, Integer>> iterator = entrySet.iterator();
            while (iterator.hasNext()) {
                if (iterator.next().getValue() == null) {
                    throw new IllegalArgumentException("map contains null value");
                }
            }
            List<Entry<String, Integer>> entryList = new ArrayList<Entry<String, Integer>>(entrySet);
            if (desc) {
                Collections.sort(entryList, new Comparator<Entry<String, Integer>>() {
                    @Override
                    public int compare(Entry<String, Integer> e1, Entry<String, Integer> e2) {
                        return e2.getValue() - e1.getValue();
                    }
                });
            } else {
                Collections.sort(entryList, new Comparator<Entry<String, Integer>>() {
                    @Override
                    public int compare(Entry<String, Integer> e1, Entry<String, Integer> e2) {
                        return e1.getValue() - e2.getValue();
                    }
                });
            }
            return entryList.get(0);
        }
    
    }
    d=3
    a=1

    例2:

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    public class Test {
        public static void main(String[] args) {
            List<Person> list = new ArrayList<Person>();
            list.add(new Person(3, "d"));
            list.add(new Person(1, "a"));
            list.add(new Person(1, "b"));
            list.add(new Person(2, "c"));
            Collections.sort(list, new Comparator<Person>() {
                @Override
                public int compare(Person p1, Person p2) {
                    return p2.getAge() - p1.getAge();
                }
            });
    
            System.out.println(list);
        }
    
    }
    
    class Person {
        private int age;
        private String name;
    
        Person(int age, String name) {
            this.age = age;
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "Person [age=" + age + ", name=" + name + "]";
        }
    
    }
    [Person [age=3, name=d], Person [age=2, name=c], Person [age=1, name=a], Person [age=1, name=b]]

    注: 值等时保持原有顺序

    非自然序,降序

    自然序(1,2,3,...),升序

  • 相关阅读:
    冒泡排序算法
    delphi 处理图片(剪切,压缩)
    delphi 创建DLL文件 及其调用和注意事项
    对属性的认识
    timer实现Grid自动换行(连续相同的id跳到下一行)
    Form1调用Unit2类中函数
    微信二次分享不显示摘要和图片
    location.search为空导致微信拿不到code的问题
    考虑一下微信跳转的登录流程如何修改-无感知
    微信7.0(2019年1月份之后,没法使用抓包了,也许是为了安全,所以联调出问题记得看后台日志)
  • 原文地址:https://www.cnblogs.com/zno2/p/5230751.html
Copyright © 2011-2022 走看看