java对list进行排序
(转载) 按数字/字符串排序:https://www.cnblogs.com/raysource/p/9199089.html 按时间排序:https://blog.csdn.net/qq_39380155/article/details/99457300
一、按数字/字符串进行排序
主要讲述对list进行排序的几种方式
1、先来个简单的,上代码
import java
.util
.ArrayList
;
import java
.util
.Collections
;
import java
.util
.List
;
public class sort {
public static void main(String
[] args
) {
List
<Integer> list
= new ArrayList<Integer>();
list
.add(new Integer(5));
list
.add(new Integer(13));
list
.add(new Integer(4));
list
.add(new Integer(9));
Collections
.sort(list
);
System
.out
.println(list
.toString());
}
}
程序运行结果:
[4, 5, 9, 13],这种简单的排序直接按照自然顺序进行升序排列。
2、list参数类型相对复杂的排序
import java
.util
.ArrayList
;
import java
.util
.Collections
;
import java
.util
.List
;
public class sort {
public static void main(String
[] args
) {
List
<User> list
= new ArrayList<User>();
list
.add(new User("张三", 5));
list
.add(new User("李四", 30));
list
.add(new User("王五", 19));
list
.add(new User("陈十七", 17));
Collections
.sort(list
);
System
.out
.println(list
.toString());
}
}
class User implements Comparable<User>{
private String name
;
private int age
;
public User(String name
, int age
) {
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
;
}
@Override
public String
toString() {
return "User [name=" + name
+ ", age=" + age
+ "]";
}
@Override
public int compareTo(User user
) {
return this.age
- user
.getAge();
}
}
程序运行结果:根据年龄升序排列
[User [name=张三, age=5], User [name=陈十七, age=17], User [name=王五, age=19], User [name=李四, age=30]]
3、匿名内部类实现排序
public class sort {
public static void main(String
[] args
) {
List
<User> list
= new ArrayList<User>();
list
.add(new User("张三", 5));
list
.add(new User("李四", 30));
list
.add(new User("王五", 19));
list
.add(new User("陈十七", 17));
Collections
.sort(list
, new Comparator<User>() {
@Override
public int compare(User u1
, User u2
) {
int diff
= u1
.getAge() - u2
.getAge();
if (diff
> 0) {
return 1;
}else if (diff
< 0) {
return -1;
}
return 0;
}
});
System
.out
.println(list
.toString());
}
}
运行结果:[User [name=张三, age=5], User [name=陈十七, age=17], User [name=王五, age=19], User [name=李四, age=30]]
**总结:**以上就是list排序经常用的几种方法,前两种方法都是通过实体实现Comparable接口并重写compareTo方法,第一种方式之所以没实现接口并实现compareTo方法,通过查看Interger类源码可以看到,java已经帮我们实现好了,所以不用再次写。最后一种方法通过匿名内部类实现Comparator接口实现compare方法,通过自定义比较器来实现排序。
二、按时间/日期进行排序
1、将日期转化为数字类型进行比较
// 两个数值进行比较时
// 升序
Collections.sort(list, new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
return o1 - o2;//注意这一行代码
}
});
//降序
Collections.sort(list, new Comparator<Integer>() {
public int compare(Integer o1, Integer o2) {
return o2 - o1;//注意这一行代码
}
});
list.sort(new Comparator<Student>() {
@Override
public int compare(Quota o1, Quota o2) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//获取体检日期,并把其类型由String转成Date,便于比较。
Date dt1 = format.parse(o1.getDate());
Date dt2 = format.parse(o2.getDate());
//以下代码决定按日期降序排序,若将return“-1”与“1”互换,即可实现升序。
//getTime方法返回一个整数值,这个整数代表了从 1970 年 1 月 1 日开始计算到 Date 对象中的时间之间的毫秒数。
if (dt1.getTime() > dt2.getTime()) {
return -1;
} else if (dt1.getTime() < dt2.getTime()) {
return 1;
} else {
return 0;
}
}
});