java list属性排序_java根据List内对象的属性排序

方法一:实现Comparator接口,并重写compare方法

实体类代码:

import java.util.Comparator;

/**

* 学生类 方法一

* 实现Comparator接口

* 并重写compare方法

* @author liaot

*

*/

public class Student implements Comparator{

private String name; //姓名

private int age; //年龄

//重写 比较方法 本次例子定义为按年龄比较

@Override

public int compare(Student o1, Student o2) {

if(o1.getAge() > o2.getAge()){

return 1;

}else{

return -1;

}

}

public Student(String name, int age) {

super();

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

测试类:

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

public class Main {

public static void main(String[] args) {

//初始化四个不同的学生

Student stu1 = new Student("路人甲", 20);

Student stu2 = new Student("路人已", 18);

Student stu3 = new Student("路人丙", 16);

Student stu4 = new Student("路人丁", 19);

//新建List把学生加进List

List stuList = new ArrayList<>();

stuList.add(stu1);

stuList.add(stu2);

stuList.add(stu3);

stuList.add(stu4);

System.out.println("排序前:=====");

for(Student stu :stuList){

System.out.println("姓名:"+stu.getName() +" 年龄"+stu.getAge());

}

//排序

Collections.sort(stuList, stu1); //第一个参数为List 第二个参数为对象的一个实例

System.out.println("排序后:=====");

for(Student stu :stuList){

System.out.println("姓名:"+stu.getName() +" 年龄"+stu.getAge());

}

}

}

运行结果:

8a8c1acbc8d1

这里写图片描述

方法二:实现Comparable接口 并重写compareTo方法

/**

* 学生类 方法二 实现Comparable接口 并重写compareTo方法

*

* @author liaot

*

*/

public class Student2 implements Comparable {

private String name; // 姓名

private int age; // 年龄

// 重写 比较方法 本次例子定义为按年龄比较

@Override

public int compareTo(Student2 stu) {

if (this.age > stu.getAge()) {

return 1;

} else {

return -1;

}

}

public Student2(String name, int age) {

super();

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

}

测试类

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

public class Main2 {

public static void main(String[] args) {

//初始化四个不同的学生

Student2 stu1 = new Student2("路人甲", 20);

Student2 stu2 = new Student2("路人已", 18);

Student2 stu3 = new Student2("路人丙", 16);

Student2 stu4 = new Student2("路人丁", 19);

//新建List把学生加进List

List stuList = new ArrayList<>();

stuList.add(stu1);

stuList.add(stu2);

stuList.add(stu3);

stuList.add(stu4);

System.out.println("排序前:=====");

for(Student2 stu :stuList){

System.out.println("姓名:"+stu.getName() +" 年龄"+stu.getAge());

}

//排序

Collections.sort(stuList); //只有一个参数参数为List

System.out.println("排序后:=====");

for(Student2 stu :stuList){

System.out.println("姓名:"+stu.getName() +" 年龄"+stu.getAge());

}

}

}

运行结果

8a8c1acbc8d1

这里写图片描述

三、总结:两种方式写法和用法上的区别:

8a8c1acbc8d1

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值