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,...),升序

  • 相关阅读:
    常见算法复杂度解析
    Linux shell脚本根据文件路径信息获取路径和名称
    linux 目录递归替换差异文件
    Linux普通用户具备root用户操作权限
    java线上异常定位工具
    OCR
    国内镜像
    hadoop镜像
    处理Jsp出现乱码问题
    无缝滚动
  • 原文地址:https://www.cnblogs.com/zno2/p/5230751.html
Copyright © 2011-2022 走看看