对List中的对象按照特定属性进行排序

Android AudioFlinger(一)——初识AndroidAudio Flinger AudioFlinger 是 Android 系统中的音频中间层(audio HAL, Audio Hardware Abstraction Layer)的一部分,负责管理音频的混音、播放和音量控制等功能。它充当 Android 应用程序和音频硬件之间的桥梁。 阅读详情

比如,某个List中存储了Student类的对象,比较简单的,我们要对List中的Student类的对象按照他们的年龄排序(升序、降序均有可能)。Collections.sort()方法可以对Integer、String等已经实现Comparable接口的类直接进行排序,但是Student类是原生的,如果直接硬生生的使用Collections.sort(testList)方法,估计就会按照对象的存储地址直接排序了。很明显,这不是我们想要的结果。其次,Collections.sort()方法默认是升序排序的,而现实需求中,降序排序也是很大概率出现的需求。主要的实现方法有两种:

(1)Student类实现Comparable接口,重写CompareTo()方法,实现如下:

class Student{ //Comparable<Student>
    private String studentName;//学生姓名
    private int age;//学生年龄
    private String sex;
    
    public Student(String studentName,int age,String sex){
        this.studentName = studentName;
        this.age = age;
        this.sex = sex;
    }
    
    public String getStudentName() {
        return studentName;
    }
    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }

    //重写compareTo方法
   @Override
    public int compareTo(Student student) {
        if(this.age<student.age){
            return -1;
            //这样是直接调用了   可以直接自己实现  按照自己的方法来实现
        }
        
        if(this.age>student.age){
            return 1;
        }
        return 0;
    }
}

这样之后,比如我们在main()方法里边实例化几个Student类的对象,然后直接调用Collections.sort(testList);其中,testList用于存储Student类的对象,代码粘贴如下:

    public static void main(String[] args) {
        
        List<Student> testList = new ArrayList<Student>();
        
        //实例化Student对象
        Student student2 = new Student("Test1",18,"FM");
        Student student3 = new Student("Test2",19,"M");
        Student student4 = new Student("Test3",20,"FM");
        Student student1 = new Student("Roland",17,"M");
    
        //数据构造完成
        testList.add(student1);
        testList.add(student2);
        testList.add(student3);
        testList.add(student4);
        
        Collections.sort(testList);
        //foreach循环打印输出
        for(Student student:testList){
            System.out.println(student.getStudentName()+"-->"+student.getAge());
        }

    }

通过观察循环输出,我们可以发现是按照升序输出的,如果要实现降序输出,只需要将Student类中的CompareTo()方法中的返回值都取反即可。

(2)Student类不实现Comparable接口,而是在调用Collections.sort()方法时,new Comparator<Student>()对象出来,实现升序或者降序操作,Student类中只需要简单的属性和set、get方法。代码粘贴如下:

    public static void main(String[] args) {
        
        List<Student> testList = new ArrayList<Student>();
        
        
        Student student2 = new Student("Test1",18,"FM");
        Student student3 = new Student("Test2",19,"M");
        Student student4 = new Student("Test3",20,"FM");
        Student student1 = new Student("Roland",17,"M");
    
        //数据构造完成
        testList.add(student1);
        testList.add(student2);
        testList.add(student3);
        testList.add(student4);
    
        Collections.sort(testList,new Comparator<Student>(){
            
            public int compare(Student student1,Student student2){
                if(student1.getAge()<student2.getAge()){
                    return 1;
                }
                if(student1.getAge() == student2.getAge()){
                    return 0;
                }
                return -1;
            }
        });//默认是是升序

        //foreach循环打印输出
        for(Student student:testList){
            System.out.println(student.getStudentName()+"-->"+student.getAge());
        }

    }

我们可以看到,按照上边的代码,打印到控制台的输出是降序的,当然如果要改为升序,只需要将上述的compare()方法中的返回值取反即可。动手实现验证了下,记录下来,加深印象,方便以后使用。

Material Studio中分子动力学模拟得到密度density和溶解度参数 使用sketh工具画出全原子分子,以异辛烷为例子。 阅读详情

相关推荐

MATLAB不能识别已安装的visual studio 2015解决方法

首先,对于MATLAB识别已经安装的vs版本通过命令: mex -setup 下图为本电脑下同时安装的两个visual studio 如果搞清楚MATLAB识别电脑上安装vs的过程,可通过命令: mex -setup -v MATLAB输出识别编译器的整个过程。其中HKLM和HKCU分别是注册表中的HKEY_CURRENT_USER,HKEY_LOCAL_MA…的缩写,MATLAB没有找到对应编译器是由于注册表里没有对应信息(主要是文件路径,C++编译器的路径),或者在注册表里存在该信息,但是找不到

qq_36320710的博客 4895

List集合元素几种排序方法总结

List排序 排序方法一(直接排序) List&lt;String&gt; names=new ArrayList&lt;String&gt;(); List&lt;Integer&gt; ages=new ArrayList&lt;Integer&gt;(); Collections.sort(names); Collections.sort(age...

caisongcheng_good的博客 6795

激光及激光器超全细节&原理总结

本文详细展示了激光、激光器、PN结、半导体激光器、光纤激光器的原理和应用;

guangwulv的博客 5338

集合对象排序

1. Collections.sort()排序 1.list集合里面存放对象person,比如要根据person对象的年龄进行排序: 利用Collections.sort()方法,重写里面的comparator方法,相当于内部类: public class SortTest { public static void main(String[] args) { String s = "aaa...

weixin_42567141的博客 675

MIT 6.824分布式 LAB4A:ShardCtrler

lab 4要求实现一个使用raft共识算法的分片存储系统。而在lab 4a中,我们仅需实现分片控制器的功能。lab4中的分片存储系统有多个分片,这些数据分布在众多分片上,而每个分片都对应着一个集群组,可能一个集群组负责多个分片,一个集群组内的所有服务器都会使用raft共识算法进行状态的复制。而本实验的重点为分片控制器,主要负责的工作是对集群组和分片之间关系的管理,我们仅需在/src/shardctrler文件夹中对client.go,server.go,common.go这三个文件进行修改即可。注意事项(实

MarksSa的博客 831

Python与西门子PLC数据交互实战:基于Snap7的跨平台工业通信指南

本文详细介绍了如何使用Python和Snap7库实现与西门子PLC的数据交互。内容涵盖跨平台环境搭建、连接参数配置、数据读写实战及性能优化技巧,为工业自动化、数据采集和智能制造场景提供了一套轻量、灵活且高效的通信解决方案。

vim8coder的博客 280

对List里的对象元素进行排序

方法一:实例化一个比较器 public class Student { private int studentId; private String studentName; private int age; public Student(int studentId , String studentName, int age){ this.stud...

hui008的博客 439

FRM模型五:Brinson业绩归因

利用Brinson对基金组合业绩进行归因分析。

stonesssssss的博客 3002

对list中的对象进行排序

list的排序分为两大类: 一种是针对简单的包装类型进行排序,即list中存放的String或者Integer类型 另一种是针对自定义的对象类型进行排序,对象需要像包装类型一样去实现Comparable接口,然后重写CompareTo方法 一、针对简单包装类型进行排序 package com.hungteshun; import java.util.ArrayList; import ...

hungteshun的专栏 1万+

1. SAP Fiori Elements 开发环境的搭建和开发准备工作

本文介绍了本地使用 Visual Studio Code 进行 Fiori Elements 开发所需要安装的这个扩展包里6个能够提高 Fiori Elements 应用开发效率的扩展。在本教程后续步骤里我们会通过实际的例子介绍这些 Visual Studio Code 扩展的详细用法。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3445

FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇四

FPGA 学习笔记:Vivado 2020.2 MicroBlaze MIG 测试 DDR3 篇四

坚韧与专注 2159

list排序

list里面是Student对象,根据Student对象的age值进行升序和jiang

丑哥最风骚 的专栏 479

极验验证码: 一点即过验证(鼠标轨迹分析)

2、第一个验证接口分析(第一个w值还原) 3、第二个验证接口(第二个w值还原)这里定位w生成跟上篇文章一样,就不展开了;主要分析tt值(鼠标轨迹)的生成逻辑

qq_49268524的博客 1008

java中List按照指定字段排序工具类

package com.yumi.mibao.util; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * List按照指定字段排序工具类 *

johennes的专栏 2969

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

List集合中的对象根据属性排序

List集合中的对象根据属性排序 集合类List存放的数据,默认是按照放入时的顺序存放的,比如依次放入A、B、C,则取得时候,则也是A、B、C的顺序,实际场景中,有时我们需要根据自定义的规则对List中的元素进行排序,该如何实现呢?看下面小例子: [html] view plaincopy package test.

殇沫流年的专栏 555

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Kotlin List 排序

Kotlin中List,根据对象某个属性值进行升序或者倒序排列 升序: data.sortBy { it.power } data 为List,it.power 代表 data 对象的某个属性。 倒序: data.sortByDescending { it.inWheat } it.inWheat 同上。 ...

vevive的专栏 3679

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java 反射创建list_Java借助反射实现自定义对象List的排序

众所周知,java里List集合类提供了sort()的方法,方便懒人对list对象进行排序,但是,其要直接使用sort方法,前提是集合中存放的是可直接排序的基本类型,如List, List等,如果我们定义了一个自定义类型 Class User,并创建一个自定义类型的集合如List,那么无参的sort()方法就不可用了,因为不知道如何排序了。这时就需要Comparator。Comparator接口里...

weixin_39605345的博客 767

遍java里自定义对象属性_Java 中List数据,自定义对象按指定的属性进行排序

对于list中单一元素排列方式:利用Collections.sort()方法进行排序。import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;public class T {public static void main(String[] args) {ArrayList list = ...

weixin_36322454的博客 201

Java中,对List存放的对象按指定属性排序

转载的,试用过了,很好! [code="java"] /** * 对List对象按照某个成员变量进行排序 * @param list List对象 * @param sortField 排序的属性名称 * @param sortMode 排序方式:ASC,DESC 任选其一 */ public ...

Tonny 426

集合涉及到的排序方式

List集合排序 List对象集合按照对象的某个属性排序 List集合对象排序 list.sort((o1, o2) -> (int) (o2.getCommentCount().get("totalCount") - o1.getCommentCount().get("totalCount"))); sort方法: public staticvoid sort(Listlist) :将集合中元素按照默认规则排序。 public staticvoi...

qq_37158147的博客 874

水电管理项目问题总结

1、有无返回值的情况 public static String inputId(){ System.out.println("输入任何与数字无关的字符,或者不为连续的 12 位数字,都是非法的!"); String id=null; while(true){ Scanner scanner=new Scanner(System.in); System.out.println("请输入学生学号");

weixin_51994374的博客 161

如何对List集合按照对象的某一属性排序

在进行软件构造实验三的过程中,遇到了对List集合按照对象的某一属性排序的问题,我们知道,在一般的情况下,java中提供了对集合进行操作的工具类Collections, Collections能够对集合中的元素用默认的排序方法sort来根据元素的自然顺序对指定集合按升序进行排序。 对于常用的java自带的类: 在java中,很多类自己实现好了Comparable接口,并且重写了comepareTo方法,所以我们可以直接调用方法就可以实现排序。我们拿Integer类来举例子: import java.ut

飞了一半的涛的博客 5666

如何对List集合中的对象进行按某个属性排序

我们在实际的开发工作中,经常会碰到排序的问题,如题,我们如何针对List集合中的某一个属性进行排序先举一个简单的例子:package test; import java.util.ArrayList; import java.util.List; import java.util.*; public class Demo { public static void main(Stri...

qq_39366175的博客 7万+

list排序方法汇总

本文为开发中实际遇到场景,作为一个学习记录。 java对list排序的几种方法 使用Collections.sort进行简单排序 List<Integer> list = new ArrayList<>(); list.add(13); list.add(22); list.add(3); list.add(9); list.add(25); Collections.s

weixin_47827594的博客 1万+

List集合里面存储Map,按照Map里面的某个属性对list中的map进行排序

package com; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; public class Com { /** * @param args */ @SuppressWarnings({ "rawtypes",

三水小鱼干的博客 1836

对List集合中每个对象元素按时间顺序排序

需求:需要对List中的每个User按照birthday顺序排序,时间由小到大排列。 1. 刚开始用的是冒泡排序,出现数据覆盖的情况 for (int i = 0; i < list.size() - 1; i++) { for (int j = 0; j < list.size() - 1 - i; j++) { long time = list.get(j).getCreateAt().getTime(); .

路在何方 4059
上一篇: SpringBoot+Quartz实现多个定时任务
下一篇: Springboot web工程中多数据源配置
Rolandcoder
博客等级 码龄10年 19粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值