5.Collections的sort方法进行排序
一、Comparable的compareto方法,进行排序
package mypro01;
import java.text.SimpleDateFormat;
import java.util.Date;
//新闻条目实体类
//实体类实现java.lang.Comparable+compareTo方法
public class NewItem implements Comparable<NewItem>{
//标题
private String title;
//点击量
private int hits;
//时间
private Date pubtime;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getHits() {
return hits;
}
public void setHits(int hits) {
this.hits = hits;
}
public Date getPubtime() {
return pubtime;
}
public void setPubtime(Date pubtime) {
this.pubtime = pubtime;
}
public NewItem(String title, int hits, Date pubtime) {
super();
this.title = title;
this.hits = hits;
this.pubtime = pubtime;
}
public NewItem() {
}
@Override
public int compareTo(NewItem o) {
int result =0;
result =-this.pubtime.compareTo(o.pubtime);//降序
if(0==result) {
result=this.hits-o.hits;
if(0==result) {
result=-this.title.compareTo(o.title);//降序
}
}
return result;
}
@Override
public String toString() {
StringBuilder sb=new StringBuilder();
sb.append("标题").append(this.title);
sb.append(",点击量").append(this.hits);
sb.append("时间").append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(pubtime)).append("\n");
return sb.toString();
}
}
package mypro01; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.List; public class NewItemApp { public static void main(String[] args) { List<NewItem> news=new ArrayList<NewItem>(); news.add(new NewItem("中国",1000000,new Date())); news.add(new NewItem("日本",1233433,new Date(System.currentTimeMillis()-1000 *60*60))); news.add(new NewItem("上海",123323,new Date(System.currentTimeMillis()-1000 *60*60))); System.out.println("排序前"+news); Collections.sort(news); System.out.println("排序后"+news); } }
结果:排序前[标题中国,点击量1000000时间2022-03-27 16:06:19 , 标题日本,点击量1233433时间2022-03-27 15:06:19 , 标题上海,点击量123323时间2022-03-27 15:06:19 ] 排序后[标题中国,点击量1000000时间2022-03-27 16:06:19 , 标题上海,点击量123323时间2022-03-27 15:06:19 , 标题日本,点击量1233433时间2022-03-27 15:06:19 ]
二、Comparator接口,重写compare方法,独立于实体类,便于应对各种排序规则
package mypro01; public class Goods { private int price; private String name; private int fav; public Goods() { super(); } public Goods(int price, String name, int fav) { super(); this.price = price; this.name = name; this.fav = fav; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getFav() { return fav; } public void setFav(int fav) { this.fav = fav; } @Override public String toString() { return "价格:"+this.price+"点击量:"+this.fav+"商品名称:"+this.name+"\n"; } }
package mypro01; import java.util.Comparator; public class GoodsSorts implements Comparator<Goods>{ @Override public int compare(Goods o1, Goods o2) { return -(o1.getPrice()-o2.getPrice()>0?1:(o1.getPrice()==o2.getPrice()?0:-1)); } }
package mypro01; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class GoodsApp { public static void main(String[] args) { List<Goods> list =new ArrayList<Goods>(); list.add(new Goods(100, "中国", 1000)); list.add(new Goods(50, "日本", 32)); list.add(new Goods(333, "英国", 23234)); System.out.println("排序前:"+list); Collections.sort(list,new GoodsSorts()); System.out.println("排序后:"+list); } }
结果: 排序前:[价格:100点击量:1000商品名称:中国 , 价格:50点击量:32商品名称:日本 , 价格:333点击量:23234商品名称:英国 ] 排序后:[价格:333点击量:23234商品名称:英国 , 价格:100点击量:1000商品名称:中国 , 价格:50点击量:32商品名称:日本 ]

浙公网安备 33010602011771号