我有一个从 json 解析出来的复杂的“Order”对象。在结构深处的某个地方我有 orderDate。我只能将其提取为字符串!现在我尝试对订单列表进行排序。
我想到了创建一个新列表,其中的数组包含两个元素,第一个是订单对象本身,第二个是解析为日期对象的日期。 例如。 new Object[]{order, new Date(order.getOrderDate())}。然后按第二个元素排序,然后解析回列表并返回。但这会创建两个新列表并且未到位。
另一个想法是创建一个像这样排序的自定义比较器
orders.sort(new Comparator<Order>() {
@Override
public int compare(Order o1, Order o2) {
return new Date(o1.getOrderDate()).compareTo(new Date(o2.getOrderDate()));
}
});
但是第二个变体将创建许多新的日期对象。每个条目都会出现很多次最坏的情况。
有没有更漂亮的方法?
最佳答案
可以使用Map
为唯一日期创建Date
实例。
final Comparator<Order> sortByDateAsc = new Comparator<Order>() {
private final Map<String, Date> map = new HashMap<>();
@Override
public int compare(Order o1, Order o2) {
Date d1 = map.computeIfAbsent(o1.getOrderDate(), Date::new);
Date d2 = map.computeIfAbsent(o2.getOrderDate(), Date::new);
return d1.compareTo(d2);
}
};
orders.sort(sortByDateAsc);
关于java - 通过复杂对象结构深处的变量对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60388579/