【问题标题】:Sorting List of Objects by long property按长属性排序对象列表
【发布时间】:2019-08-04 10:31:20
【问题描述】:

可以像这样使用 Collections.sort(object) 比较 int 值:

Collections.sort(priceList, new Comparator<MyObject>() {
    @Override
    public int compare(MyObject o1, MyObject o2) {
        return Integer.parseInt(o1.getPrice()) - Integer.parseInt(o2.getPrice());
    }
});

Long.compare 可在 API 19 及更高版本中使用 Collections.sort(object) 比较长值:

Collections.sort(priceList, new Comparator<MyObject>() {
    @Override
    public int compare(MyObject o1, MyObject o2) {
        return Long.compare(o2.getPrice(), o1.getPrice());
    }
});

但我的应用程序的minSdkVersion16 并且我的价格值大于 int 范围的最大值!!!

如何在 API 级别 16 及更高级别中按 long 属性对我的对象列表进行排序?

【问题讨论】:

    标签: java android sorting collections comparator


    【解决方案1】:

    Long#compare的定义:

    public static int compare(long x, long y) {
        return (x < y) ? -1 : ((x == y) ? 0 : 1);
    }
    

    类似地,如果值大于另一个值,您可以简单地return 1,如果等于则0,如果小于则-1

    Collections.sort(priceList, new Comparator<MyObject>() {
        @Override
        public int compare(MyObject o1, MyObject o2) {
           return (o1.getPrice() < o2.getPrice()) ? -1 : ((o1.getPrice() == o2.getPrice()) ? 0 :1 );
    });
    

    【讨论】:

    • 天哪。你说得对。疲倦并没有让我好好思考。
    【解决方案2】:

    您可以按如下方式实现比较方法。这应该可以解决您的问题。

    public int compare(MyObject o1, MyObject o2) {
                    return o1.getPrice() < o2.getPrice ?-1 :(o1.getPrice == o2.getPrice ?0 :1);
    
    }
    

    【讨论】:

    • 你的回答也是正确的。感谢您抽出宝贵时间,但 Amit 回复得更快。
    猜你喜欢
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多