【发布时间】:2020-02-25 06:20:59
【问题描述】:
我有一个从 json 解析的复杂“订单”对象。在结构深处的某个地方,我有 orderDate。我只能将其提取为字符串!现在我尝试对订单列表进行排序。
我的想法是创建一个新的 List,其中的数组包含两个元素,第一个是 Order 对象本身,第二个是解析为 Date 对象的 Date。 例如。新对象[]{order, new Date(order.getOrderDate())}。然后按第二个元素排序,然后解析回 List 并返回。但这会创建两个新的 List 并且没有到位。
另一个想法是创建一个像这样排序的自定义比较器
orders.sort(new Comparator<Order>() {
@Override
public int compare(Order o1, Order o2) {
return new Date(o1.getOrderDate()).compareTo(new Date(o2.getOrderDate()));
}
});
但是第二个变体会创建很多新的日期对象。每个条目都有很多次最坏的情况。
有没有更漂亮的方法解决它?
【问题讨论】:
-
由于date是字符串共振峰,比较Date,应该是Object形式,所以我觉得没有办法不创建更多的DateObject,排序吧。
-
你的日期字符串是什么格式的?如果它们在 ISO 8601 中,您可以直接比较字符串并获得与比较日期相同的结果。
-
@dkb 是的,没错。但是有没有办法在每个 Oder 中只创建一次 Date 对象?我的第二个示例是为每个“比较”调用创建两个日期对象。它不存储对象。每次新日期都在装箱
-
@Sweeper "yyyy-MM-dd HH:mm:ss"。我猜你的解决方案可能会奏效。你怎么看?
-
是的,虽然它不是 ISO 8601,但这种格式也可以。