java - 通过复杂对象结构深处的变量对列表进行排序

标签 java sorting

我有一个从 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/

相关文章:

optimization - 在shell中以不同的顺序调用uniq和排序

python - Pandas 中从列值创建排序列表的有效且最快的方法

java - 禁用 JFrame 但想要访问菜单窗口

java - 将 Java Applet 与数据库连接

R 表函数 : how to coerce order of column names output of table()

java - 如何在java中对列表对象(int)进行排序?

根据年龄和国籍将人分类到房间的算法

java - 带有 Spring 5 的响应式(Reactive) WebSockets - 如何获取初始消息

java - 无法使用camel SQL组件连接到mariaDB

java - 处理大量 POST 参数