zno2

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

posted on 2016-08-05 18:41  zno2  阅读(223)  评论(0编辑  收藏  举报

导航