java--对象比较器
-
在实际的项目中,经常会遇到排序问题,对于基本数据类型java支持Arrays.sort()和Collection.sort()对集合进行排序,但是对用户自定义类型排序呢?java给我们提供了两种解决方案。
一:通过实现Comparable<Object> 在内部实现
示例代码:
package com.lky.model; import java.io.Serializable; @SuppressWarnings("serial") public class Student implements Serializable, Comparable<Student> { private String name; private Integer id; private String log; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getLog() { return log; } public void setLog(String log) { this.log = log; } @Override public String toString() { return "Student [name=" + name + ", id=" + id + ", log=" + log + "]"; } @Override public int compareTo(Student o) { return o.getId()-id; } }
二.通过实现 Comparator<Object> 来定义排序规则
示例代码:
package com.lky.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Random; import org.junit.Test; import com.lky.model.Student; public class compartorTest { public class OutComparator implements Comparator<Student> { @Override public int compare(Student o1, Student o2) { int result = 0; result = o1.getId() - o2.getId(); if (result == 0) { return o1.getName().compareTo(o2.getName()); } else { return result; } } } @Test public void test() { List<Student> array = new ArrayList<Student>(); for (int i = 0; i < 20; ++i) { Student student = new Student(); student.setId(new Random().nextInt(10) + 1); student.setLog("log" + i); student.setName("lky" + i); array.add(student); } Collections.sort(array);// 采用默认排序 // Collections.sort(array, new OutComparator());//采用自定义排序 for (Student student : array) { System.out.println(student); } } }
作者:奋斗的珞珞
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 个人数据保全计划:从印象笔记迁移到joplin
· Vue3.5常用特性整理
· 重拾 SSH:从基础到安全加固
· 为什么UNIX使用init进程启动其他进程?