2019年5月20日记
需求:对一个集合排序,集合中存放的是自定义对象。按照自定义对象的2个属性排序【小–>大】【大–>小】
亲,把程序粘贴到本地,跑起来。想怎么盘它,就怎么盘它。2分钟就明了啦
1、List中是基本数据类型or包装数据类型
public static void main(String[] args) {
List<Integer> nums = new ArrayList<Integer>();
nums.add(3);
nums.add(5);
nums.add(1);
nums.add(0);
System.out.println(nums);
Collections.sort(nums);
System.out.println(nums);
}
输出结果:
2、自定义对象按照1个属性or 2个属性排序
import java.util.Date;
/**
* 因为要实现对ConsumInfo对象的排序,所以在ConsunInfo类中要实现Comparable接口,也就是要实现compareTo()方法
* 具体的比较参照:依次按照price、uid进行顺序排序
* @author breeze
*
*/
public class ConsumInfo implements Comparable<ConsumInfo> {
private Integer uid;
private String name;
private Double price;
private Date datetime;
public ConsumInfo() {
}
public ConsumInfo(int uid,String name,double price,Date datetime){
this.uid = uid;
this.name = name;
this.price = price;
this.datetime = datetime;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Date getDatetime() {
return datetime;
}
public void setDatetime(Date datetime) {
this.datetime = datetime;
}
@Override
public String toString() {
return "ConsumInfo [uid=" + uid + ", name=" + name + ", price=" + price
+ ", datetime=" + datetime + "]";
}
@Override
public int compareTo(ConsumInfo o) {
//首先比较price,如果price相同,则比较uid
int num = price.compareTo(o.price); //从小到大
if(num==0){ //如果price值相等,则比较uid属性,同样是从小到大
num = uid.compareTo(o.uid); //num = o.uid.compareTo(uid); 从大到小
}
return num;
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
public class ConsumInfoTest {
public static void main(String[] args) {
ConsumInfo consumInfo1 = new ConsumInfo(100, "consumInfo1", 400.0,new Date());
ConsumInfo consumInfo2 = new ConsumInfo(200, "consumInfo1", 200.0,new Date());
ConsumInfo consumInfo3 = new ConsumInfo(300, "consumInfo1", 100.0,new Date());
ConsumInfo consumInfo4 = new ConsumInfo(400, "consumInfo1", 700.0,new Date());
ConsumInfo consumInfo5 = new ConsumInfo(500, "consumInfo1", 800.0,new Date());
ConsumInfo consumInfo6 = new ConsumInfo(600, "consumInfo1", 300.0,new Date());
ConsumInfo consumInfo7 = new ConsumInfo(700, "consumInfo1", 900.0,new Date());
ConsumInfo consumInfo8 = new ConsumInfo(800, "consumInfo1", 400.0,new Date());
List<ConsumInfo> list = new ArrayList<ConsumInfo>();
list.add(consumInfo1);
list.add(consumInfo2);
list.add(consumInfo3);
list.add(consumInfo4);
list.add(consumInfo5);
list.add(consumInfo6);
list.add(consumInfo7);
list.add(consumInfo8);
System.out.println("排序前:");
//排序前
for(ConsumInfo consumInfo : list ){
System.out.println(consumInfo);
}
Collections.sort(list);//排序,必须的有这一行
System.out.println("排序后:");
//排序后
for(ConsumInfo consumInfo :list){
System.out.println(consumInfo);
}
}
}
解释:【Integer,String,Double等】均已实现了Comparable接口,所以封装类型可以直接使用。
int compareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
参数: o - 要比较的对象。
返回:负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
抛出:ClassCastException - 如果指定对象的类型不允许它与此对象进行比较。
若为基本类型,效果同样。