Java集合List按日期升序或降序四种方法

时间:2025-03-19 17:24:21

总结Java集合List按日期升序或降序常见的四种方法如下

四种方法快速预览
Method 1、不管是Date、String、Long类型的日期都可以排序,无需转换

((t1, t2) -> ().compareTo(()));
1
Method 2、利用stream,需要把字符串日期转换为时间戳

orders = ().sorted((t1,t2) ->
(convertTimeToLong(()),
convertTimeToLong(()))).
collect(());

Method 3、利用Comparator接口实现,java8的写法

(orders, (Order::getPayTime, (t1, t2) -> (t1)));
1
Method 4、利用Comparator接口实现,java8之前通常这样写

(orders,new Comparator(){
@Override
public int compare(Order o1, Order o2) {
return ().compareTo(());
}
});

准备的类
import ;
import ;

@AllArgsConstructor
@Data
class Order {
/**
* 订单号
*/
private String orderNum;

/**
 * 付款时间
 */
private String payTime;

/**
 * 支付金额
 */
private Integer actualAmount;

}

方法一
import ;
import ;

public class TestTimeSort {
public static void main(String[] args) {
Order order1 = new Order(“1101”, “2019-11-03 00:30:31”, 100);
Order order2 = new Order(“1102”, “2019-11-03 00:30:32”, 200);
Order order3 = new Order(“1103”, “2019-11-03 00:30:33”, 300);
Order order4 = new Order(“1104”, “2019-11-03 00:30:34”, 400);
Order order5 = new Order(“1105”, “2019-11-03 00:30:35”, 500);
List orders = new ArrayList<>();
(order2);
(order1);
(order4);
(order3);
(order5);
("------------排序前-----------------");
for (Order order : orders) {
(“orderNum=” + () + “,payTime=” + ());
}
//不管是Date、String、Long类型的日期都可以排序,无需转换
((t1, t2) -> ().compareTo(()));
("------------倒序后-----------------");
for (Order order : orders) {
(“orderNum=” + () + “,payTime=” + ());
}
}
}

方法二
import ;
import ;
import ;
import ;
import ;
import ;

public class TestTimeSort {
public static void main(String[] args) {
Order order1 = new Order(“1101”, “2019-11-03 00:30:31”, 100);
Order order2 = new Order(“1102”, “2019-11-03 00:30:32”, 200);
Order order3 = new Order(“1103”, “2019-11-03 00:30:33”, 300);
Order order4 = new Order(“1104”, “2019-11-03 00:30:34”, 400);
Order order5 = new Order(“1105”, “2019-11-03 00:30:35”, 500);
List orders = new ArrayList<>();
(order2);
(order1);
(order4);
(order3);
(order5);
("------------排序前-----------------");
for (Order order : orders) {
(“orderNum=” + () + “,payTime=” + ());
}
//利用stream,需要把字符串日期转换为时间戳
orders = ().sorted((t1,t2) ->
(convertTimeToLong(()), convertTimeToLong(()))).
collect(());
("------------倒序后-----------------");
for (Order order : orders) {
(“orderNum=” + () + “,payTime=” + ());
}
}

/**
 * 将字符串转日期成Long类型的时间戳,格式为:yyyy-MM-dd HH:mm:ss
 */
public static Long convertTimeToLong(String time) { 
    DateTimeFormatter formatter = ("yyyy-MM-dd HH:mm:ss");
    LocalDateTime parse = (time, formatter);
    return (parse).atZone(()).toInstant().toEpochMilli();
}  

}

方法三
import ;
import ;
import ;
import ;

public class TestTimeSort {
public static void main(String[] args) {
Order order1 = new Order(“1101”, “2019-11-03 00:30:31”, 100);
Order order2 = new Order(“1102”, “2019-11-03 00:30:32”, 200);
Order order3 = new Order(“1103”, “2019-11-03 00:30:33”, 300);
Order order4 = new Order(“1104”, “2019-11-03 00:30:34”, 400);
Order order5 = new Order(“1105”, “2019-11-03 00:30:35”, 500);
List orders = new ArrayList<>();
(order2);
(order1);
(order4);
(order3);
(order5);
("------------排序前-----------------");
for (Order order : orders) {
(“orderNum=” + () + “,payTime=” + ());
}
//利用Comparator接口实现,java8的写法
(orders, (Order::getPayTime, (t1, t2) -> (t1)));
("------------倒序后-----------------");
for (Order order : orders) {
(“orderNum=” + () + “,payTime=” + ());
}
}
}

方法四
import ;
import ;
import ;
import ;

public class TestTimeSort {
public static void main(String[] args) {
Order order1 = new Order(“1101”, “2019-11-03 00:30:31”, 100);
Order order2 = new Order(“1102”, “2019-11-03 00:30:32”, 200);
Order order3 = new Order(“1103”, “2019-11-03 00:30:33”, 300);
Order order4 = new Order(“1104”, “2019-11-03 00:30:34”, 400);
Order order5 = new Order(“1105”, “2019-11-03 00:30:35”, 500);
List orders = new ArrayList<>();
(order2);
(order1);
(order4);
(order3);
(order5);
("------------排序前-----------------");
for (Order order : orders) {
(“orderNum=” + () + “,payTime=” + ());
}
//利用Comparator接口实现,java8之前通常这样写
(orders,new Comparator(){
@Override
public int compare(Order o1, Order o2) {
return ().compareTo(());
}
});
("------------倒序后-----------------");
for (Order order : orders) {
(“orderNum=” + () + “,payTime=” + ());
}
}
}

四种方法最后输出如下
------------排序前-----------------
orderNum=1102,payTime=2019-11-03 00:30:32
orderNum=1101,payTime=2019-11-03 00:30:31
orderNum=1104,payTime=2019-11-03 00:30:34
orderNum=1103,payTime=2019-11-03 00:30:33
orderNum=1105,payTime=2019-11-03 00:30:35
------------倒序后-----------------
orderNum=1105,payTime=2019-11-03 00:30:35
orderNum=1104,payTime=2019-11-03 00:30:34
orderNum=1103,payTime=2019-11-03 00:30:33
orderNum=1102,payTime=2019-11-03 00:30:32
orderNum=1101,payTime=2019-11-03 00:30:31

原文链接:/lzxlfly/article/details/102878760