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



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


自己实现一个list比较器 实现Comparator()接口的更多相关文章

  1. Java 之 比较器( Comparator接口与 Comparable 接口)

    一.定制排序:java.util.Comparator 接口 强行对某个对象 collection 进行整体排序 的比较函数.可以将 Comparator 传递给 sort 方法(如 Collecti ...

  2. Java TreeSet集合排序 && 定义一个类实现Comparator接口,覆盖compare方法 && 按照字符串长度排序

    package TreeSetTest; import java.util.Iterator; import java.util.TreeSet; import javax.management.Ru ...

  3. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  4. Java.lang.Comparable接口和Java.util.Comparator接口的区别

    Java的Comparator和Comparable当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序. 1.Com ...

  5. java Comparable 和 Comparator接口区别

    Comparable 简介 Comparable 是排序接口. 若一个类实现了Comparable接口,就意味着“该类支持排序”.  即然实现Comparable接口的类支持排序,假设现在存在“实现C ...

  6. JAVA Comparator 接口排序用法

    java的比较器有两类,分别是Comparable接口和Comparator接口. 在为对象数组进行排序时,比较器的作用非常明显,首先来讲解Comparable接口. 让需要进行排序的对象实现Comp ...

  7. Comparable比较器和Comparator比较器

    1.Comparable比较器 在Arrays类中存在sort()排序方法,此方法可以直接对对象数组进行排序. public static void sort(Object[] a 根据元素的自然顺序 ...

  8. 比较器Comparable Comparator

    一. Comparable Comparable 是排序接口,若一个类实现了 Comparable 接口,就意味着该类支持排序.实现了Comparable 接口的类的对象的列表或者数组可以通过 Col ...

  9. 比较器:Compare接口与Comparator接口区别与理解

    一.实现Compare接口与Comparator接口的类,都是为了对象实例数组排序的方便,因为可以直接调用 java.util.Arrays.sort(对象数组名称),可以自定义排序规则. 不同之处: ...

随机推荐

  1. java 8 foreach获取索引

    当 forEach 需要索引 https://segmentfault.com/a/1190000007881498 或者采用 List<string> stringList = new ...

  2. 并发编程的锁机制:synchronized和lock

    1. 锁的种类 锁的种类有很多,包括:自旋锁.自旋锁的其他种类.阻塞锁.可重入锁.读写锁.互斥锁.悲观锁.乐观锁.公平锁.可重入锁等等,其余就不列出了.我们重点看如下几种:可重入锁.读写锁.可中断锁. ...

  3. 红帽Linux故障定位技术详解与实例(2)

    红帽Linux故障定位技术详解与实例(2) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍 ...

  4. 性能优化(1+N,list与iterator,缓存,事务)

    1.注意session.clear()的运用,尤其是不断分页循环的时候 A 在一个大集合中进行遍历,取出其中含有敏感字的对象 B 另一种形式的内存泄露. 2.1+N问题 问题描述:如@ManyToOn ...

  5. [洛谷P4040] AHOI2014 宅男计划

    题目背景 自从迷上了拼图,JYY就变成了个彻底的宅男.为了解决温饱问题,JYY不得不依靠叫外卖来维持生计. 问题描述 外卖店一共有N种食物,分别有1到N编号.第i种食物有固定的价钱Pi和保质期Si.第 ...

  6. 前端有用JavaScript技巧

    数组去重 //法1 var arr = [1, 2, 3, 3, 4]; console.log(...new Set(arr)) // [1, 2, 3, 4] //法2 function SetA ...

  7. Vue:列表展开和收起(超过一定行数时显示‘查看更多’按钮)

    前言:前端小白记录的一些小功能~ 公司开发中的小程序中有做任务签到的功能,这就涉及到了任务列表以及对任务列表的展开和收起功能,好了可以开始了,说多了就烦了 1.首先是css样式,因为设计稿上是超过两行 ...

  8. yum 安装 mongodb

    1 .添加阿里源 vi /etc/yum.repos.d/mongodb.repo [mongodb-org] name=MongoDB Repository baseurl=http://mirro ...

  9. “M_PI_2”: 重复定义的宏

    问题警告:“M_PI_2”: 重复定义的宏 分析:在Visual Studio上使用math.h库时与其他库数学库冲突,我们可以通过添加宏定义“_USE_MATH_DEFINES”来消除math.h定 ...

  10. luogu 3241 [HNOI2015]开店 动态点分治+二分+vector

    独立写出来+想出来的,1.5h就切了~ 建立点分树,然后用 $vector$ 暴力存所有子节点,然后二分一下子就可以了. #include <cstdio> #include <ve ...