在复杂对象的结构中,通过变量从深处对列表进行排序

来源:爱站网时间: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表示形式来使用它,而不必理会其来源。

上一篇:Android应用没有互联网连接-无需权限

下一篇:我如何要求用户输入字符串? (如果要输入中心和半径,或直径的端点?)(读取输入)

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载