public class Student {
private int studentId;
private String studentName;
private int age;
public Student(int studentId , String studentName, int age){
this.studentId=studentId;
this.studentName=studentName;
this.age=age;
}
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
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;
} } import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator; public class test { /**
* @param args
*/
public static void main(String[] args) {
Comparator<Student> comparator = new Comparator<Student>() {
public int compare(Student s1, Student s2) {
// 先排年龄
if (s1.getAge() != s2.getAge()) {
return s1.getAge() - s2.getAge();
} else if (!s1.getStudentName().equals(s2.getStudentName())) {
// 年龄相同则按姓名排序
return s1.getStudentName().compareTo(s2.getStudentName());
} else {
// 姓名也相同则按学号排序
return s1.getStudentId() - s2.getStudentId();
}
}
};
Student stu1 = new Student (1,"zhangsan",28);
Student stu2 = new Student (2,"zhagnsan",19);
Student stu3 = new Student (3,"wangwu",19);
Student stu4 = new Student (4,"wangwu",19);
Student stu5 = new Student (5,"zhaoliu",18); ArrayList<Student> list = new ArrayList<Student>();
list.add(stu1);
list.add(stu2);
list.add(stu3);
list.add(stu4);
list.add(stu5);
//这里就会自动根据规则进行排序
Collections.sort(list,comparator);
for(int i=0;i<list.size();i++){
Student stu=list.get(i);
System.out.println("年龄:"+stu.getAge()+" 姓名:"+stu.getStudentName()+" 学号:"+stu.getStudentId());
} } } 第二个是实现Comparable接口 public class Student2 implements Comparable<Student2>{ //必须实现CompareTo()
private int studentId;
private String studentName;
private int age;
public Student2(int studentId , String studentName, int age){
this.studentId=studentId;
this.studentName=studentName;
this.age=age;
}
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
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 int compareTo(Student2 o) {
if(age!=o.getAge()){
return age-o.getAge();
}else if(!studentName.equals(o.getStudentName())){
return studentName.compareTo(o.getStudentName());
}else {
return studentId-o.getStudentId();
}
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Student2){
Student2 stu=(Student2)obj;
if((age==stu.getAge())&&(studentName.equals(stu.getStudentName()))&&(studentId==stu.getStudentId())){
return true;
}else
return true;
}else{
return false;
}
} } import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator; public class test2 { /**
* @param args
*/
public static void main(String[] args) {
Student2 stu1 = new Student2 (1,"zhangsan",28);
Student2 stu2 = new Student2 (2,"zhagnsan",19);
Student2 stu3 = new Student2 (3,"wangwu",19);
Student2 stu4 = new Student2 (4,"wangwu",19);
Student2 stu5 = new Student2 (5,"zhaoliu",18); ArrayList<Student2> list = new ArrayList<Student2>();
list.add(stu1);
list.add(stu2);
list.add(stu3);
list.add(stu4);
list.add(stu5);
//这里就会自动根据规则进行排序
Collections.sort(list);
for(int i=0;i<list.size();i++){
Student2 stu=list.get(i);
System.out.println("年龄:"+stu.getAge()+" 姓名:"+stu.getStudentName()+" 学号:"+stu.getStudentId());
} } } 结果: 年龄:18 姓名:zhaoliu 学号:5 年龄:19 姓名:wangwu 学号:3 年龄:19 姓名:wangwu 学号:4 年龄:19 姓名:zhagnsan 学号:2 年龄:28 姓名:zhangsan 学号:1 注:大家可以看下api文档里对接口 Comparable<T>接口的介绍,里面说是建议重写equals方法,否则可能出现怪异的表现

对List里的对象元素进行排序的更多相关文章

  1. 如何使用 Java 对 List 中每个对象元素按时间顺序进行排序

    如何使用 Java 对 List 中每个对象元素按时间顺序进行排序 Java 实现 import java.text.SimpleDateFormat; import java.util.ArrayL ...

  2. Javascript系列——对象元素的数组去重实现

    概要 这是一篇记录文,记录数组操作对象去重的实现. 需求 有这样一个数组 [{ _id: 123, name: '张三' },{ _id: 124, name: '李四' },{ _id: 123, ...

  3. C#中的IComparable 和 IComparer 接口,实现列表中的对象比较和排序

    借豆瓣某博主的话先对这两个接口进行一个解释: IComparable在要比较的对象的类中实现,可以比较该对象和另一个对象 IComparer在一个单独的类中实现,可以比较任意两个对象. 如果已经支持 ...

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

    集合类List存放的数据,默认是按照放入时的顺序存放的,比如依次放入A.B.C,则取得时候,则也是A.B.C的顺序,实际场景中,有时我们需要根据自定义的规则对List中的元素进行排序,该如何实现呢?看 ...

  5. [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  6. jQuery.sort对DOM元素进行排序

    实例: 每个tr的第三列显示的都是数字,我们就以这数字列作为排序依据,方法就是利用jquery的sort()方法. 首先,利用jquery选择器获取每个tr元素,获取回来是一个数据: var $trs ...

  7. Python中使用operator模块实现对象的多级排序

    Python中使用operator模块实现对象的多级排序 今天碰到一个小的排序问题,需要按嵌套对象的多个属性来排序,于是发现了Python里的operator模块和sorted函数组合可以实现这个功能 ...

  8. Selenium 常用定位对象元素的方法

    常见定位对象元素的方法 在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方 ...

  9. HPU 1127:【C语言程序设计】[7.4.2]最大元素(排序)

    [C语言程序设计][7.4.2]最大元素 时间限制: 1 Sec 内存限制: 128 MB提交: 386 解决: 139 题目描述 编一个程序,读入n个元素的实型数组,然后调用一个函数,递归地找出其中 ...

随机推荐

  1. StringComparison枚举

    public enum StringComparison { CurrentCulture, CurrentCultureIgnoreCase, InvariantCulture, Invariant ...

  2. js格式化日期 年月日

    /**                     * 格式化日期                     * @param value                     * @param row  ...

  3. javaBean的使用方法;

    在jsp页面中使用javaBean:三个标签: <jsp:useBean>标签 <jsp:setProperty>标签 <jsp:getProperty>标签 首先 ...

  4. Digital Roots 分类: HDU 2015-06-19 22:56 13人阅读 评论(0) 收藏

    Digital Roots Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...

  5. setprecision(int n)等格式函数用法 分类: POJ 2015-06-11 10:56 17人阅读 评论(0) 收藏

    **这些用法前最好用 #include <iostream>    //不要用iostream.h ,会出现好多问题 #include <iomanip> // io 流控制头 ...

  6. Unity中内置Shader源码的获取方式

    现在可以直接在Unity下载页面获得 http://unity3d.com/get-unity/download/archive 包括StandardShader,StandardShaderGUI. ...

  7. 机器人走方格 V3

    1120 . 机器人走方格 V3   基准时间限制:1 秒 空间限制:65536 KB 分值: 160 N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在 ...

  8. 无边框窗体、用户控件、Timer控件

    一.无边框窗体1 最大化.最小化以及关闭按钮制作实际上就是更换点击前.指向时.点击时的图片 (1)将图片放在该文件夹的Debug中,获取图片的路径Application.StartupPath + & ...

  9. 【Web】简谈如何监听浏览器的关闭

    > 参考的优秀文章 beforeunload实现关闭离开的提示 想起以前做的一个小系统,一个企业内部小型的测试系统,让考生在给定时间内完成考试,如果考生中退出,那么下次进来可以利用剩余的考试时间 ...

  10. c#中struct和class的区别 详细[转]

    转自:http://blog.csdn.net/justlovepro/archive/2007/11/02/1863734.aspx 有这么几点不同: 1.struct 是值类型,class是对象类 ...