java list排序

通常是使用Collections的sort方法

 

第一种是java类实现了Comparable接口

public interface Comparable<T> {
    
    public int compareTo(T o);
}

 第二种是普通的java类,在传给sort方法时同时传递给他比较的方式。

先来个第一种方法的demo

public class BookBean implements Comparable {

    private String name;
    private int count;

    public BookBean() {
    }

    public BookBean(String name, int count) {
        this.name = name;
        this.count = count;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    @Override
    public int compareTo(Object another) {
        if (another instanceof BookBean) {
            BookBean anotherBook = (BookBean) another;
            int result;

            //比如这里按照书价排序
            result = getCount() - anotherBook.getCount();

            //或者按照 String 的比较顺序
            //result = getName().compareTo(anotherBook.getName());

            if (result == 0) {   //当书价一致时,再对比书名。 保证所有属性比较一遍
                result = getName().compareTo(anotherBook.getName());
            }
            return result;
        }
        // 一样就返回 0
        return 0;
    }

    @Override
    public String toString() {
        return "BookBean{" +
                "name='" + name + '\'' +
                ", count=" + count +
                '}';
    }
}

比较时只用把BookBean的List传给sort方法即可

     BookBean bookBean = new BookBean("aaa", 12);
        BookBean bookBean3 = new BookBean("ddd", 12);
        BookBean bookBean1 = new BookBean("bbb", 12);
        BookBean bookBean2 = new BookBean("ccc", 13);
        List list = Arrays.asList(bookBean, bookBean1, bookBean2, bookBean3);
        Collections.sort(list);
        System.out.println(list);

输出如下

[BookBean{name='aaa', count=12}, BookBean{name='bbb', count=12}, BookBean{name='ddd', count=12}, BookBean{name='ccc', count=13}]

第二种是通过传递比较方式来进行排序

普通的java类People

public class People {

    private String name;

    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public People(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public People() {
    }

    @Override
    public String toString() {
        return "People{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

比较方法

        People people = new People("vvv", 12);
        People people1 = new People("va", 13);
        People people2 = new People("aaa", 12);
        List<People> peopleList = Arrays.asList(people, people1, people2);
        Collections.sort(peopleList, new Comparator<People>() {
            @Override
            public int compare(People o1, People o2) {
                int result = 0;
                result = o1.getAge() - o2.getAge();
                if (result == 0) {
                    result = o1.getName().compareTo(o2.getName());
                }
                return result;
            }
        });    
        System.out.println(peopleList);    

输出结果如下

[People{name='aaa', age=12}, People{name='vvv', age=12}, People{name='va', age=13}]

java8以后List自带了一个sort方法(当然还可以继续使用Collections.sort)

java8 List的api中的sort

我们用java8的lambda来写一次People的排序

        People people = new People("vvv", 12);
        People people1 = new People("va", 13);
        People people2 = new People("aaa", 12);
        List<People> peopleList1 = Arrays.asList(people, people1, people2);
        peopleList1.sort((People o1, People o2) -> {
            int result = 0;
            result = o1.getAge() - o2.getAge();
            if (result == 0) {
                result = o1.getName().compareTo(o2.getName());
            }
            return result;
        });

输入结果还是如上。

 

posted on 2018-02-28 14:37  幽人月  阅读(168)  评论(0)    收藏  举报