对List里的对象元素进行排序
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里的对象元素进行排序的更多相关文章
- 如何使用 Java 对 List 中每个对象元素按时间顺序进行排序
如何使用 Java 对 List 中每个对象元素按时间顺序进行排序 Java 实现 import java.text.SimpleDateFormat; import java.util.ArrayL ...
- Javascript系列——对象元素的数组去重实现
概要 这是一篇记录文,记录数组操作对象去重的实现. 需求 有这样一个数组 [{ _id: 123, name: '张三' },{ _id: 124, name: '李四' },{ _id: 123, ...
- C#中的IComparable 和 IComparer 接口,实现列表中的对象比较和排序
借豆瓣某博主的话先对这两个接口进行一个解释: IComparable在要比较的对象的类中实现,可以比较该对象和另一个对象 IComparer在一个单独的类中实现,可以比较任意两个对象. 如果已经支持 ...
- List集合中的对象根据属性排序
集合类List存放的数据,默认是按照放入时的顺序存放的,比如依次放入A.B.C,则取得时候,则也是A.B.C的顺序,实际场景中,有时我们需要根据自定义的规则对List中的元素进行排序,该如何实现呢?看 ...
- [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- jQuery.sort对DOM元素进行排序
实例: 每个tr的第三列显示的都是数字,我们就以这数字列作为排序依据,方法就是利用jquery的sort()方法. 首先,利用jquery选择器获取每个tr元素,获取回来是一个数据: var $trs ...
- Python中使用operator模块实现对象的多级排序
Python中使用operator模块实现对象的多级排序 今天碰到一个小的排序问题,需要按嵌套对象的多个属性来排序,于是发现了Python里的operator模块和sorted函数组合可以实现这个功能 ...
- Selenium 常用定位对象元素的方法
常见定位对象元素的方法 在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方 ...
- HPU 1127:【C语言程序设计】[7.4.2]最大元素(排序)
[C语言程序设计][7.4.2]最大元素 时间限制: 1 Sec 内存限制: 128 MB提交: 386 解决: 139 题目描述 编一个程序,读入n个元素的实型数组,然后调用一个函数,递归地找出其中 ...
随机推荐
- StringComparison枚举
public enum StringComparison { CurrentCulture, CurrentCultureIgnoreCase, InvariantCulture, Invariant ...
- js格式化日期 年月日
/** * 格式化日期 * @param value * @param row ...
- javaBean的使用方法;
在jsp页面中使用javaBean:三个标签: <jsp:useBean>标签 <jsp:setProperty>标签 <jsp:getProperty>标签 首先 ...
- 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 ...
- setprecision(int n)等格式函数用法 分类: POJ 2015-06-11 10:56 17人阅读 评论(0) 收藏
**这些用法前最好用 #include <iostream> //不要用iostream.h ,会出现好多问题 #include <iomanip> // io 流控制头 ...
- Unity中内置Shader源码的获取方式
现在可以直接在Unity下载页面获得 http://unity3d.com/get-unity/download/archive 包括StandardShader,StandardShaderGUI. ...
- 机器人走方格 V3
1120 . 机器人走方格 V3 基准时间限制:1 秒 空间限制:65536 KB 分值: 160 N * N的方格,从左上到右下画一条线.一个机器人从左上走到右下,只能向右或向下走.并要求只能在 ...
- 无边框窗体、用户控件、Timer控件
一.无边框窗体1 最大化.最小化以及关闭按钮制作实际上就是更换点击前.指向时.点击时的图片 (1)将图片放在该文件夹的Debug中,获取图片的路径Application.StartupPath + & ...
- 【Web】简谈如何监听浏览器的关闭
> 参考的优秀文章 beforeunload实现关闭离开的提示 想起以前做的一个小系统,一个企业内部小型的测试系统,让考生在给定时间内完成考试,如果考生中退出,那么下次进来可以利用剩余的考试时间 ...
- c#中struct和class的区别 详细[转]
转自:http://blog.csdn.net/justlovepro/archive/2007/11/02/1863734.aspx 有这么几点不同: 1.struct 是值类型,class是对象类 ...