1.List中的对象实现Comparable接口:
public class User implements Comparable<User> {
private String name;
private Integer order;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
public int compareTo(User arg0) {
return this.getOrder().compareTo(arg0.getOrder());
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Test {
public static void main(String[] args) {
User user1 = new User();
user1.setName("a");
user1.setOrder(1);
User user2 = new User();
user2.setName("b");
user2.setOrder(2);
List<User> list = new ArrayList<User>();
// 此处add user2再add user1
list.add(user2);
list.add(user1);
Collections.sort(list);
for (User u : list) {
System.out.println(u.getName());
}
}
}
2.使用静态内部类实现Comparator接口
import java.util.*;
public class test {
public static void main(String args[]) {
ArrayList<Student> al = new ArrayList<Student>();
al.add(new Student(2, "aa"));
al.add(new Student(1, "bb"));
al.add(new Student(3, "dd"));
al.add(new Student(3, "cc"));
Collections.sort(al, new StudentComparator());
Iterator<Student> it = al.iterator();
while (it.hasNext()) {
System.out.println(it.next());
/****
* id=1,name=bb
id=2,name=aa
id=3,name=cc
id=3,name=dd
*/
}
}
}
class Student {
int id;
String name;
Student(int id, String name) {
this.id = id;
this.name = name;
}
public String toString() {
return "id=" + this.id + ",name=" + this.name;
}
}
class StudentComparator implements Comparator<Student> {
//先比较int id id相同后再比较String name
public int compare(Student o1, Student o2) {
Student s1 = (Student) o1;
Student s2 = (Student) o2;
int result = (s1.id > s2.id) ? 1 : ((s1.id == s2.id) ? 0 : -1);
if (0 == result) {
result = s1.name.compareTo(s2.name);
}
return result;
}
}
补充 比较字符串类型的数字
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<String> list = new ArrayList<String>();
list.add("4");
list.add("8");
list.add("9");
list.add("19");
//Collections.sort(list);// [19, 4, 8, 9] 错误
Collections.sort(list, new Comparator<String>() {
// [4, 8, 9, 19]
@Override
public int compare(String o1, String o2) {
if (Integer.parseInt(o1) > Integer.parseInt(o1)) {
return -1;
}
return 1;
}
});
System.err.println(list);// [19, 4, 8, 9]
}
}