一:一个实体类
成员变量有名字,年龄,分数
/** * @author lizhibiao * @date 2018/11/27 17:21 */ public class User { private String userName; private int age; private int cutScore; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getCutScore() { return cutScore; } public void setCutScore(int cutScore) { this.cutScore = cutScore; } }
二:实现一个User类的比较器
public class UserComparator implements Comparator这里注意:{ @Override public int compare(User o1, User o2) { if (o1.getAge() > o2.getAge()) { return -1; } else if (o1.getAge() < o2.getAge()) { return 1; } else if (o1.getCutScore() < o2.getCutScore()) { return 1; } else if (o1.getCutScore() > o2.getCutScore()) { return -1; } return 0; } }
1.类名不能起为Comparator会报错,所以我们加个User前缀。
2.UserComparator要实现Comparator接口,并且接口传入<User>类
3.必须实现compare()方法
4.
if (o1.getAge() > o2.getAge()) { return -1; } else if (o1.getAge() < o2.getAge()) { return 1; } else if (o1.getCutScore() < o2.getCutScore()) { return 1; } else if (o1.getCutScore() > o2.getCutScore()) { return -1; } return 0;
这个的意思是最优先以年龄排序,并且从年龄大的往下排序,也就是从大到小排序要返回-1(可以看出比较器默认是从小到大排序的)
然后再根据分数从大到小排序
相等返回0
三:看下测试输出结果:
public static void main(String[] args) { User user1 = new User(); user1.setUserName("小二"); user1.setAge(10); user1.setCutScore(99); User user2 = new User(); user2.setUserName("清水"); user2.setAge(12); user2.setCutScore(98); User user3 = new User(); user3.setUserName("小李"); user3.setAge(10); user3.setCutScore(100); Listlist = new ArrayList<>(); list.add(user1); list.add(user2); list.add(user3); Collections.sort(list, new UserComparator()); for (User user : list) { System.out.println(user.getUserName()+" "+user.getAge()+" "+user.getCutScore()); } }
结果如下:
清水 12 98
小李 10 100
小二 10 99
有疑问,扫我二维码添加微信,欢迎骚扰!
坚持做一件事,一起学习。