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; });
输入结果还是如上。
浙公网安备 33010602011771号