当前位置: 首页 > 知识库问答 >
问题:

在复杂对象中按结构深处的变量对列表进行排序

江礼骞
2023-03-14

我有一个从JSON解析的复杂“order”对象。在结构的深处,我有秩序日期。我只能把它提取成字符串!现在我尝试对订单列表进行排序。

我的想法是创建一个新的列表,其中数组由两个元素组成,首先是Order对象本身,其次是解析为Date对象的Date。例如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()));
        }
    });

还有比这更美的方法吗?

共有1个答案

秦新立
2023-03-14

可以使用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使用分数作为比较的值?

  • 问题内容: 我有一个Java对象列表,希望根据多个字段进行排序。 是否可以使用或接口根据多个字段对列表进行排序?我看到的所有示例仅根据一个领域进行排序。换句话说,可以按“校园”或“教师”或“建筑”进行排序。我想按“校园”,“教师”,“建筑”(因为它在SQL中存在)进行排序 问题答案: 您的比较器如下所示: 基本上,只要到目前为止已比较的属性相等(),它就会继续比较类的每个连续属性。

  • 问题内容: 我需要对一个包含每个人年龄的数组列表进行排序,但是我必须打印出一个65岁以上的人的列表。我知道如何用SQL而不是Java来做到这一点。任何帮助,将不胜感激。谢谢! 问题答案: 首先,请确保您已充分说明了问题,然后考虑首先要使用的算法(不是特定于语言的);然后实施算法。 如果问题仅在于列出年龄在65岁以上(不是65岁或65岁以上)的所有人员,则只需要遍历该数组,并针对每一行检查年龄是否符

  • 如何按照一个属性的字母顺序(不是名称,而是属性所包含的实际值)对一个对象列表进行排序?

  • 但我得到一条错误消息,说无法在原语类型int上调用compareToIgnoreCase(int) 我如何修复这段代码,使它能够用整数值对列表进行排序?

  • 问题内容: 这个问题已经在这里有了答案 : 如何根据对象的属性对对象列表进行排序? (8个答案) 1年前关闭。 我有一个看起来像这样的对象列表。 Card(10,’H)在这里不是元组,而是对象。我知道如果列表中的每个项目都是元组形式的,如何对列表进行排序,就像这样, 但我不知道如何对对象列表进行排序。我想按第一个输入值(即Card()中的数字)对列表进行排序 我怎样才能做到这一点? 编辑:这是Ca