对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个元素的实型数组,然后调用一个函数,递归地找出其中 ...
随机推荐
- https协议操作
在伪静态中加入下列代码 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{SERVER_PORT} 80 RewriteRul ...
- Android listview下拉刷新 SwipeRefreshLayout
今天在Google+上看到了SwipeRefreshLayout这个名词,遂搜索了下,发现竟然是刚刚google更新sdk新增加的一个widget,于是赶紧抢先体验学习下. SwipeRefreshL ...
- mediastream2使用指南(转载)
http://blog.sina.com.cn/s/blog_59d649610100diui.html 定义 Filter: 媒体库中处理数据的组件.一个filter有0到数个输入流和0到数个输出流 ...
- 显示实时日期时间(html+js)
<!DOCTYPE><html> <head> <title> New Document </title> <meta name=&q ...
- POJ 3320 Jessica's Reading Problem 尺取法
Description Jessica's a very lovely girl wooed by lots of boys. Recently she has a problem. The fina ...
- MyBatis环境搭建
什么是MyBatis: MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架(O object R relatoin M mapping 框架),MyBatis 避免了几 乎所 ...
- django 简单的邮件系统
django邮件系统 Django发送邮件官方中文文档 总结如下: 1.首先这份文档看三两遍是不行的,很多东西再看一遍就通顺了. 2.send_mail().send_mass_mail()都是对Em ...
- 【原创】pads layout 画多边形copper,出现Self-Intersecting Polygon,解决办法
在做线性位移传感器的电路板时,需要在一个很小的多边形Copper操作,总是提示“Self-Intersecting Polygon”报错,意思是outline线自身交叉,换句话说就是线宽与多边形尺寸没 ...
- zoj 1199 几何公式推导
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=199 Point of Intersection Time Limit: ...
- python中的is、==和cmp()比较字符串
python 中的is.==和cmp(),比较字符串 经常写 shell 脚本知道,字符串判断可以用 =,!= 数字的判断是 -eq,-ne 等,但是 Python 确不是这样子地.所以作为慢慢要转换 ...