Java系列之Comparable
2017-05-10 本文已影响11人
吴世浩
一:背景
为啥会有这篇文章了,其实也是凑巧,因为最近接了一个特别蛋疼的需求,那就是本来之前的订单业务线只查询旧版的接口的,但是现在这个系统换了,但是订单数据没有做同步,那么现在订单接口就有两个了,一个新的一个旧的,我那个无语的,所以了在按照日期查询数据的时候需要排序,那么涉及到类的排序我们就需要按照规则进行需要实现Comparable接口
二:实现
所以具体如下
package com.mouse.order.model;
import com.mouse.moon.util.StringUtil;
public class OrderInfo implements Comparable{
private String id;
private String orderCd;//订单号
private String productType;//产品类型 酒店,机票
private String productName;//产品名称 深圳-北京
private String beginDate;//开始时间
private String endDate;//结束时
private String amount;//数量
private String orderPrice;//订单金额
private String status;//订单状态
private String paymentStatus;//支付状态
private String channelName;//渠道名称
private String createDate;//创建时间
private String payState;
private String orderStatus;
private String orderStatusName;
public String getProductType() {
return productType;
}
public void setProductType(String productType) {
this.productType = productType;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getBeginDate() {
return beginDate;
}
public void setBeginDate(String beginDate) {
this.beginDate = beginDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
public String getOrderPrice() {
return orderPrice;
}
public void setOrderPrice(String orderPrice) {
this.orderPrice = orderPrice;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getPaymentStatus() {
return paymentStatus;
}
public void setPaymentStatus(String paymentStatus) {
this.paymentStatus = paymentStatus;
}
public String getChannelName() {
return channelName;
}
public void setChannelName(String channelName) {
this.channelName = channelName;
}
public String getCreateDate() {
return createDate;
}
public void setCreateDate(String createDate) {
this.createDate = createDate;
}
public String getOrderCd() {
return orderCd;
}
public void setOrderCd(String orderCd) {
this.orderCd = orderCd;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPayState() {
return payState;
}
public void setPayState(String payState) {
this.payState = payState;
}
public String getOrderStatus() {
return orderStatus;
}
public void setOrderStatus(String orderStatus) {
this.orderStatus = orderStatus;
}
public String getOrderStatusName() {
return orderStatusName;
}
public void setOrderStatusName(String orderStatusName) {
this.orderStatusName = orderStatusName;
}
public int compareTo(Object o) {
OrderInfo order = (OrderInfo)o;
if(null == this.getCreateDate() || null == order.getCreateDate())
{
return 0;
}
long tTime = StringUtil.str2Long(this.getCreateDate().replaceAll(":", "").replaceAll(" ","").replaceAll("-",""));
long oTime = StringUtil.str2Long(order.getCreateDate().replaceAll(":", "").replaceAll(" ","").replaceAll("-",""));
if (tTime > oTime) {
return -1;
} else if (tTime < oTime) {
return 1;
} else {
return 0;
}
}
}
所以对实现Comparable接口的在compareTo方法中进行需要的判断,这里我按照创建时间进行比较。
具体使用出为Collections.sort(orderInfoList);在这里面会按照类的实现比较方式进行排序操作。
// 按时间排序
Collections.sort(orderInfoList);
排完序后就需要进行截取操作
orderInfoList.subList(0, pageSize) ;
三:比较Comparator
自然顺序就是那种String,Integer这种,它们都实现了Comparable,而Comparator本身就用了策略设计模式,可以根据自己定义的排序规则进行比较排序,想升序,降序都可以。
四:浩语
__
__ _ ____ __| |__ _____ ___
\ \/ \/ / | \ | \\__ \ / _ \
\ /| | / Y \/ __ \( <_> )
\/\_/ |____/|___| (____ /\____/
\/ \/
任何事情都是要靠努力和用心。