java积累(一)------后端---Comparator比较器的用法
对数组或者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比较器的用法相关推荐
- java中sort函数comparator的使用_Java Comparator comparingInt()用法及代码示例
compareInt(java.util.function.ToIntFunction)方法接受一个函数作为参数,从类型T中提取一个int排序键,并返回一个与该排序键进行比较的Comparator.返 ...
- Java核心API -- 7(Iterator迭代器、Comparable、Comparator比较器)
1. Iterator迭代器 所有Collection的实现类都实现了iterator方法,该方法返回一个Iterator接口类型的对象,用于实现对集合元素迭代的便利.在java.util包下. 1) ...
- Java中的集合---------Collections 类---集合的工具类 Comparator比较器
Collections 2.1 常用功能 java.utils.Collections是集合工具类,用来对集合进行操作.部分方法如下: public static <T> boolean ...
- JAVA语言-比较器Comparator(java中Comparable和Comparator的区别)
文章目录 一.什么是Comparator 二.Java compare方法和compareTo方法 三.java中Comparable和Comparator的区别 Comparator的例子 三.de ...
- 【Java 8 新特性】Java Comparator | 比较器
Java Comparator | 比较器 比较器功能方法:compare(T o1, T o2) 1. 使用 Lambda 表达式定义 compare 2. 自定义 compare 实现比较器 比较 ...
- 秒杀Java中的Comparator比较器
教你使用Java中的Comparator比较器 一.知识点简述: 自定义比较器: Comparator:比较器 Comparator是一个接口,无法直接创建对象,需要实现类去创建 创建Comparat ...
- 简单介绍Java中Comparable和Comparator
转载自 简单介绍Java中Comparable和Comparator Comparable 和 Comparator是Java核心API提供的两个接口,从它们的名字中,我们大致可以猜到它们用来做对象之 ...
- Java 中 Comparable 和 Comparator 比较
为什么80%的码农都做不了架构师?>>> 本文,先介绍Comparable 和Comparator两个接口,以及它们的差异:接着,通过示例,对它们的使用方法进行说明. Comp ...
- Java中Comparable和Comparator的区别
前言 最近复习遇到了这个问题,在此进行一个详细的记录,分享给大家. 两个接口的区别 包区别 Comparable接口是在java.lang下. Comparator接口是在java.util下. 使用 ...
最新文章
- 利用Java存储过程简化数据库操作
- 教程:一起学习Hystrix--服务(依赖)失败场景的表象
- 【XAudio2】2.XAudio2 开始!
- 最近面试遇到的技术问题
- hibernate 别名_Hibernate:在sqlRestriction上使用联接表别名
- 从环境搭建到回归神经网络案例,带你掌握Keras
- 2013年1月5号第一次事故
- Java 7 最快要到 2012 年中发布
- Ice简介+Qt代码示例
- 富国基金:基金公司是如何进行数据架构规划与实践的
- Kali linux 渗透测试(五)——渗透WPS攻击
- MySQL驱动到底是什么东西?
- axure通用元件库 Pc、Web端原型图组件库高保真UI rp源文件
- Sitemesh前段框架基础
- 2021全球程序员收入报告出炉!
- Nginx 域名跳转配置
- 对新手严重不友好的强者——Nginx那些俯拾皆是的坑
- idear修改新的git地址
- 无人机飞控 ardupilot Copter-4.0.7 库示例
- NLP学习记录——句法分析
热门文章
- python+tensorflow CNN卷积神经网络手写字体识别
- 七千年来被国人误解的七句古话
- 被黑的SNES是一款多合一的复古游戏机
- android自动划屏实现,OSC首发:android中的左右滑屏实现By ViewPager
- 英文字母字符简便替换法
- 台式计算机电源线 规格,台式电脑电源线怎么接
- 华为日志服务器文档,华为日志服务器配置
- pbe近似_量子化学中的主要近似.doc
- oracle vm win10,virtualbox win10系统下载-oracle vm virtualbox windows 10 64 bitv6.1.14 最新版 - 极光下载站...
- list里每个元素字符串转为int;‘list‘ object is not callable;list中字符串改为int;字符串转为list;list每个int转为str;list转为字符串;