Java实现多个对象排序(两种方式)

如果是Java自定义的对象,需要对多个对象进行排序,这里使用Java自身提供的排序函数Collections.sort();但是我们的对象需要支持这个函数,需要做一些改动。有两种方式实现,第一种是自定义对象实现Comparable接口,并且覆盖compareTo方法,将这个方法的逻辑替换为自己的排序逻辑;另外一种方式是在排序时使用Comparator类,并且覆盖compare方法,改写为自己排序的逻辑。

实现Comparable类明确表示这个自定义类别是支持排序的,使用Comparator类非常灵活,可以在需要排序的时候才使用。

我们看下Collections.sort()函数的官方定义,可以看到,支持的类型是需要实现Comparable接口的

public static <T extends Comparable<? super T>> void sort(List<T> list)

另外一个重载的方法,明确需要一个Comparator

public static <T> void sort(List<T> list, Comparator<? super T> c)

接下来详解两种方式

Comparable 方式

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;public class SortObj {public void demoForComparable() {CutePig pig1 = new CutePig("猪聪明", 18);  // 第一个对象CutePig pig2 = new CutePig("猪可爱", 12);  // 第二个对象CutePig pig3 = new CutePig("猪能干", 16);  // 第三个对象ArrayList<CutePig> pigList = new ArrayList<>();pigList.add(pig1);pigList.add(pig2);pigList.add(pig3);Collections.sort(pigList);System.out.println("按年龄排序(升序)后结果如下");for (CutePig pig : pigList) {System.out.println(pig.toString());}}public static void main(String[] args) {SortObj obj = new SortObj();obj.demoForComparable();}class CutePig implements Comparable<CutePig> {String name;int age;public CutePig(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "name is " + this.name + "; age is " + this.age;}@Overridepublic int compareTo(CutePig other) {return this.age - other.age;}}
}

运行结果如下

按年龄排序(升序)后结果如下
name is 猪可爱; age is 12
name is 猪能干; age is 16
name is 猪聪明; age is 18

Comparator 方式

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;public class SortObj {public void demoForComparator() {SweetHeart love1 = new SweetHeart("猪可爱", "pig");SweetHeart love2 = new SweetHeart("哈士奇", "dog");SweetHeart love3 = new SweetHeart("大火鸡", "chicken");ArrayList<SweetHeart> loveList = new ArrayList<>();loveList.add(love1);loveList.add(love2);loveList.add(love3);Collections.sort(loveList, new Comparator<SweetHeart>() {@Overridepublic int compare(SweetHeart sweet1, SweetHeart sweet2) {return sweet2.type.compareTo(sweet1.type);}});System.out.println("按类型首字母排序(降序)后结果如下");for (SweetHeart love : loveList) {System.out.println(love.toString());}}public static void main(String[] args) {SortObj obj = new SortObj();obj.demoForComparator();}class SweetHeart {String name;String type;public SweetHeart(String name, String type) {this.name = name;this.type = type;}@Overridepublic String toString() {return "name is " + this.name + "; type is " + this.type;}}}

运行结果如下

name is 猪可爱; type is pig
name is 哈士奇; type is dog
name is 大火鸡; type is chicken

Java实现对象列表排序相关推荐

  1. Java 8 Comparator: 列表排序

    1.按字母顺序排序字符串列表 List<String> cities = Arrays.asList("Milan","london"," ...

  2. java map对象排序输出_java实现对象的排序(List和Map)

    java实现对象的排序(List和Map) List和Map的排序 在实际的开发当中,我们经常 在文件浏览的时候经常有多种浏览方式,按时间整箱排序,逆向排序,按大小正逆向排序 ,按 按价格正逆向排序, ...

  3. java compareto方法怎么排序的_深入理解Java中Comparable和Comparator排序

    本文有牛旦教育原创,头条首发,转载注明来源. 如何为需要的排序算法选择正确的接口?通过本文的分析讲解,我们会找到答案参考答案. 程序员经常需要将数据库中的元素排序为集合.数组或映射.在Java中,我们 ...

  4. php 把java list对象转成数组,java_JSON的String字符串与Java的List列表对象的相互转换,在前端: 1.如果json是List对象 - phpStudy...

    JSON的String字符串与Java的List列表对象的相互转换 在前端:1.如果json是List对象转换的,可以直接遍历json,读取数据. 2.如果是需要把前端的List对象转换为json传到 ...

  5. java对列表数据排序_如何在Java中对列表进行排序

    java对列表数据排序 Sometimes we have to sort a list in Java before processing its elements. In this tutoria ...

  6. java list 转json 字符串_JSON的String字符串与Java的List列表对象的相互转换

    1.JSON的String字符串与Java的List列表对象的相互转换 在前端: 1.如果json是List对象转换的,可以直接遍历json,读取数据. 2.如果是需要把前端的List对象转换为jso ...

  7. JAVA中如何将一个json形式的字符串转为json对象或对象列表

    import java.util.*; import java.text.SimpleDateFormat;import org.json.JSONObject; import org.json.JS ...

  8. Java对List对象进行排序

    为什么80%的码农都做不了架构师?>>>    有时候需要对List对象进行排序,如果每一处都去写一个排序方法,就会产生重复代码的坏味道,而且每一处都写,工作量会很大. 我们知道,J ...

  9. 如何在Java中对Collection对象进行排序?

    排序集合的对象 (Sorting objects of the Collection) This concept is related to sorting and here we will see ...

最新文章

  1. 干货|深入浅出YOLOv5
  2. 打通Devops的Scrum敏捷工具
  3. PAT甲级1132 Cut Integer:[C++题解]
  4. 开头和结尾标记 在不同系统_文本标记的宝藏平台——Docusky
  5. Linux (Ubuntu/deepin等)终端命令安装Lamp
  6. 一款简单好用的开源文档管理系统
  7. Vue图表(v-charts, e-charts)入门安装使用
  8. 2020主流室内定位技术对比
  9. Excel 2010 VBA 入门 140 在功能区添加按钮并运行VBA程序
  10. 如何做好新媒体运营推广工作,黎想首谈一位优秀新媒体运营策划人员的思维模型
  11. qsort函数的使用
  12. SSD与HDD如何混合组raid并永久挂载硬盘?
  13. MAC Catalina系统问题总结与解决办法
  14. BERT 获取最后一层或每一层网络的向量输出
  15. 对list集合排序升序和降序使用sort()
  16. 使用scrapy做爬虫遇到的一些坑:网站常用的反爬虫策略,如何机智的躲过反爬虫Crawled (403)
  17. ffmpeg常用滤镜命令
  18. 频率响应范围测试软件,Analog Discovery 2 测评(3) 频率响应测试利器
  19. 【进阶版】机器学习之模型性能度量及比较检验和偏差与方差总结(02)
  20. 从此再不吃“肯德基”,无论那个管状物是蛔虫还是鸡肉组织

热门文章

  1. 8.30 vim编辑器 文件查找 文件系统 作业(练习)
  2. SecureCRT 使用脚本命令自动记录日志
  3. JavaScript所有保留字
  4. Ubuntu20.04静态IP设置
  5. UVA-11600-Masud Rana
  6. 八年级上册计算机知识点总结,八年级英语上册知识点归纳
  7. 如何写出一篇爆款文章?【CSDN攻略】创作技巧篇
  8. ANDROID PAD模拟器设置
  9. layerui ios不适应问题
  10. 传统工业制造业,如何通过工业品B2B网站转型高端制造业企业