在复杂对象的结构中,通过变量从深处对列表进行排序
来源:爱站网时间:2021-09-27编辑:网友分享
我有一个从json解析的复杂的“ Order”对象。在结构的某个深处,我有orderDate。我只能将其提取为STRING!现在,我尝试对订单列表进行排序。我来了...
问题描述
我有一个从json解析的复杂的“ Order”对象。在结构的某个深处,我有orderDate。我只能将其提取为STRING!现在,我尝试对订单列表进行排序。
我想到了创建一个新列表的想法,其中的数组包含两个元素,第一个是Order对象本身,第二个是解析为Date对象的Date。例如。新的Object [] {order,新的Date(order.getOrderDate())}。然后按第二个元素排序,然后解析回List并返回。但这会创建两个新列表,并且没有到位。
另一个想法是创建一个这样的自定义比较器
orders.sort(new Comparator() {
@Override
public int compare(Order o1, Order o2) {
return new Date(o1.getOrderDate()).compareTo(new Date(o2.getOrderDate()));
}
});
但是第二个变体将创建许多新的Date对象。每个条目的最坏情况很多次。
周围还有更漂亮的方法吗?
思路:
您提供的方案中的唯一选择是直接比较字符串。因此,基本上将字符串拆分为相应的内容(年,月,日,...),然后比较这些值。您可以在其中一个较高的级别后立即返回,例如如果为a.month > b.month
,则无需比较日期等。
但是,另一方面,这可能比您当前的方法更丑陋,而且不一定具有更高的性能。
一种更好的方法是调整JSON解析。应该始终将JSON解析为其各自的对应对象,而不是保留字符串。因此,将您的解析调整为已经有Date
而不是String
,并省去了稍后在代码中使用数据的麻烦。这就是封送处理的目的,让您可以使用JSON的简单(例如)Java表示形式来使用它,而不必理会其来源。