zoukankan      html  css  js  c++  java
  • 自己实现一个list比较器 实现Comparator()接口

    一:一个实体类
    成员变量有名字,年龄,分数
    /**
    * @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<User> {
    @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);


    List<User> list = 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



    有疑问,扫我二维码添加微信,欢迎骚扰!
    坚持做一件事,一起学习。


  • 相关阅读:
    python学习笔记 day44 mysql练习题(三)
    python学习笔记 day44 mysql 练习题(二)
    python学习笔记 day44 mysql练习题(一)
    python学习笔记 day44 数据库三范式
    python学习笔记 day44 表与表之间的关系
    西北大学集训队选拔赛(重现赛)
    #Leetcode# 196. Delete Duplicate Emails
    #Leetcode# 596. Classes More Than 5 Students
    #Leetcode# 176. Second Highest Salary
    #Leetcode# 620. Not Boring Movies
  • 原文地址:https://www.cnblogs.com/lizb0907/p/10039122.html
Copyright © 2011-2022 走看看