对数组或者List列表,或者Map(非hash)等排序是我们经常使用的一种处理数据的手段。Comparator接口是java中很方便的一个接口。

我们只需要重写compare方法即可实现排序。

int compare(Object o1, Object o2) 返回一个基本类型的整型
如果要按照升序排序,
则o1 小于o2,返回-1(负数),相等返回0,01大于02返回1(正数)
如果要按照降序排序
则o1 小于o2,返回1(正数),相等返回0,01大于02返回-1(负数)

使用步骤

新建比较器并重写compare方法

 Comparator<User> comp=new Comparator<User>(){//升序public int compare(User o1,User o2){if(o1.getAge()>o2.getAge()){return 1;}else if(o1.getAge()==o2.getAge()){return 0;}else{return -1;}                   }
};

也可以新建内部类或者外部类如下:

public class UserAgeComparator implements Comparator<User> {  //升序public int compare(User o1,User o2){if(o1.getAge()>o2.getAge()){return 1;}else if(o1.getAge()==o2.getAge()){return 0;}else{return -1;}                   }}

使用比较器

 Collections.sort(users,comp);   Collections.reverse(users);//反转排序

如果是类的的话需要先实例化再使用

  UserAgeCompartor mc = new UserAgeCompartor ();Collections.sort(list, mc);

自定义比较器----文本比较

上述的使用方法已经能够满足大部分的使用场景。只需要我们处理compare函数中的比较逻辑即可。(包括数组,字符串长度,时间等的比较都能满足)。

但是如果要比较文本内容的话,还是自定义比较器规则会方便一些。使用步骤也是一样的,只是在compare方法中我们需要定义一个规则器。

package com.test;  import java.text.ParseException;
import java.text.RuleBasedCollator;
import java.util.Comparator;
import com.test.domain.User;  public class UserNameComparator implements Comparator<User> {  @Override  public int compare(User o1, User o2) {  String myrule = "<王<赵<李<张";   RuleBasedCollator myrulecollato = null;  try {  myrulecollato = new RuleBasedCollator(myrule);  } catch (ParseException e) {  e.printStackTrace();  }  return myrulecollato.compare(o1.getUsername(), o2.getUsername());  }
}  

这里 "王<赵<李<张" 就是我们规定的文本内容排序规则,这样的话 有王字的就会排在前面了。如果出现文本模糊匹配不准确的出来的排序不准确的话,只需要把全名写上就能准确排序了,比如"王五<赵六<李四<张三"

如果需要了解原理的话 建议查看这两篇。

List的sort中的Comparator的使用和原理

JDK 源代码阅读之 TimSort

java积累(一)------后端---Comparator比较器的用法相关推荐

  1. java中sort函数comparator的使用_Java Comparator comparingInt()用法及代码示例

    compareInt(java.util.function.ToIntFunction)方法接受一个函数作为参数,从类型T中提取一个int排序键,并返回一个与该排序键进行比较的Comparator.返 ...

  2. Java核心API -- 7(Iterator迭代器、Comparable、Comparator比较器)

    1. Iterator迭代器 所有Collection的实现类都实现了iterator方法,该方法返回一个Iterator接口类型的对象,用于实现对集合元素迭代的便利.在java.util包下. 1) ...

  3. Java中的集合---------Collections 类---集合的工具类 Comparator比较器

    Collections 2.1 常用功能 java.utils.Collections是集合工具类,用来对集合进行操作.部分方法如下: public static <T> boolean ...

  4. JAVA语言-比较器Comparator(java中Comparable和Comparator的区别)

    文章目录 一.什么是Comparator 二.Java compare方法和compareTo方法 三.java中Comparable和Comparator的区别 Comparator的例子 三.de ...

  5. 【Java 8 新特性】Java Comparator | 比较器

    Java Comparator | 比较器 比较器功能方法:compare(T o1, T o2) 1. 使用 Lambda 表达式定义 compare 2. 自定义 compare 实现比较器 比较 ...

  6. 秒杀Java中的Comparator比较器

    教你使用Java中的Comparator比较器 一.知识点简述: 自定义比较器: Comparator:比较器 Comparator是一个接口,无法直接创建对象,需要实现类去创建 创建Comparat ...

  7. 简单介绍Java中Comparable和Comparator

    转载自 简单介绍Java中Comparable和Comparator Comparable 和 Comparator是Java核心API提供的两个接口,从它们的名字中,我们大致可以猜到它们用来做对象之 ...

  8. Java 中 Comparable 和 Comparator 比较

    为什么80%的码农都做不了架构师?>>>    本文,先介绍Comparable 和Comparator两个接口,以及它们的差异:接着,通过示例,对它们的使用方法进行说明. Comp ...

  9. Java中Comparable和Comparator的区别

    前言 最近复习遇到了这个问题,在此进行一个详细的记录,分享给大家. 两个接口的区别 包区别 Comparable接口是在java.lang下. Comparator接口是在java.util下. 使用 ...

最新文章

  1. 利用Java存储过程简化数据库操作
  2. 教程:一起学习Hystrix--服务(依赖)失败场景的表象
  3. 【XAudio2】2.XAudio2 开始!
  4. 最近面试遇到的技术问题
  5. hibernate 别名_Hibernate:在sqlRestriction上使用联接表别名
  6. 从环境搭建到回归神经网络案例,带你掌握Keras
  7. 2013年1月5号第一次事故
  8. Java 7 最快要到 2012 年中发布
  9. Ice简介+Qt代码示例
  10. 富国基金:基金公司是如何进行数据架构规划与实践的
  11. Kali linux 渗透测试(五)——渗透WPS攻击
  12. MySQL驱动到底是什么东西?
  13. axure通用元件库 Pc、Web端原型图组件库高保真UI rp源文件
  14. Sitemesh前段框架基础
  15. 2021全球程序员收入报告出炉!
  16. Nginx 域名跳转配置
  17. 对新手严重不友好的强者——Nginx那些俯拾皆是的坑
  18. idear修改新的git地址
  19. 无人机飞控 ardupilot Copter-4.0.7 库示例
  20. NLP学习记录——句法分析

热门文章

  1. python+tensorflow CNN卷积神经网络手写字体识别
  2. 七千年来被国人误解的七句古话
  3. 被黑的SNES是一款多合一的复古游戏机
  4. android自动划屏实现,OSC首发:android中的左右滑屏实现By ViewPager
  5. 英文字母字符简便替换法
  6. 台式计算机电源线 规格,台式电脑电源线怎么接
  7. 华为日志服务器文档,华为日志服务器配置
  8. pbe近似_量子化学中的主要近似.doc
  9. oracle vm win10,virtualbox win10系统下载-oracle vm virtualbox windows 10 64 bitv6.1.14 最新版 - 极光下载站...
  10. list里每个元素字符串转为int;‘list‘ object is not callable;list中字符串改为int;字符串转为list;list每个int转为str;list转为字符串;