最近有这样一个需求,List中保存的订单信息,先要对订单内的金额按照倒叙排序,金额大的放在最前面,然后按照日期倒序,最早的日期放在前面
import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* @author 秋水
* @version 1.0
*/
public class Test {
public static void main(String[] args) {
OrderModel userDo1 = new OrderModel("aaa", 10.0, new Date());
OrderModel userDo2 = new OrderModel("aaa", 20.0, new Date());
OrderModel userDo3 = new OrderModel("aaa", 30.0, new Date());
SortPrice sortPrice = new SortPrice();
SortTime sortTime = new SortTime();
List<OrderModel> list = Lists.newArrayList(userDo1, userDo2, userDo3);
Ordering<OrderModel> secondaryOrdering = Ordering.from(sortPrice).reverse().compound(sortTime);
Collections.sort(list, secondaryOrdering);
for (OrderModel userDo : list) {
System.out.println(userDo.toString());
}
}
}
import com.google.common.primitives.Doubles;
import java.util.Comparator;
/**
* @author 秋水
* @version 1.0
*/
public class SortPrice implements Comparator<OrderModel> {
@Override
public int compare(OrderModel o1, OrderModel o2) {
return Doubles.compare(o1.getPrice(),o2.getPrice());
}
}
import com.google.common.primitives.Longs;
import java.util.Comparator;
/**
* @author 秋水
* @version 1.0
*/
public class SortTime implements Comparator<OrderModel> {
@Override
public int compare(OrderModel o1, OrderModel o2) {
return o1.getStartTime().compareTo(o2.getStartTime());
}
}
import java.sql.Timestamp;
import java.util.Date;
import lombok.Data;
/**
* @author 秋水
* @version 1.0
*/
@Datapublic class OrderModel { /** * 用户名 */ private String userName; private Double price; private Date startTime; public OrderModel(String userName, Double price, Date startTime) { this.userName = userName; this.price = price; this.startTime = startTime; }}