【问题标题】:Sorting arraylist. Comparation by int value排序数组列表。按 int 值比较
【发布时间】:2014-04-12 21:23:07
【问题描述】:

我想按 int 值对我的 Listview 进行排序。我查看了类似的问题和解决方案,并做了类似的事情,但它没有对 listView 进行降序排序(顺便说一句,没有发生任何事情)。在 arrayList 中是该对象具有名为“rating”的字段的对象。这是一个代码:

public class GifModel implements Comparable<GifModel>, Comparator<Integer>{
.......
.......

@Override
    public int compare(Integer lhs, Integer rhs) {
        // TODO Auto-generated method stub
        return lhs.intValue() > rhs.intValue() ? 1:0;
    }

}

在主要活动中。 “ratingSort”是一个列表:

ratingSort = new ArrayList<GifModel>(list);

    Collections.sort(ratingSort, new Comparator<GifModel>() {
        @Override
        public int compare(GifModel lhs, GifModel rhs) {
        return lhs.compare(lhs.getRating(),rhs.getRating());
        }

        });

【问题讨论】:

  • @nKn 这会产生语法错误,因为lhsrhs 不是原语。

标签: java android sorting arraylist


【解决方案1】:

将您的排序比较器更改为此,您应该很高兴:

Collections.sort(ratingSort, new Comparator<GifModel>() {

    @Override
    public int compare(GifModel lhs, GifModel rhs) {
        if (lhs.getRating() < rhs.getRating())
            return -1;
        else if (lhs.getRating() > rhs.getRating())
            return 1;
        return 0;
    }

});

【讨论】:

  • 你是最棒的。这就是我需要的。谢谢你:)
  • 没问题,很高兴为您提供帮助。请记住,在进行比较器时,您需要返回 3 个可能的值。您的原件只有 1 或 0。
  • 当然。感谢您的注释。我会记住的。
【解决方案2】:

您不想对列表视图进行排序,而是对正在适应它的集合进行排序。你可以做一个简单的Comparator() 来完成。

【讨论】:

  • 但我必须定义将在比较中使用的标签。我不能这样比较
【解决方案3】:

根据您的要求,将您的GifModel impl 实现是多余的。 Comparator,如果它已经实现了。 Comparable&lt;GifModel&gt;.

您可以只实现compareTo(GifModel o) 方法,然后比较gifModelObj.getRating(),因此您可以只使用Collections.sort(ratingSort)

如果您有按any possible field of GifModel 对列表进行排序等要求,您可以让您的GifModel 既不实现Comparator 也不实现Comparable。并创建多个Comparators进行排序。

【讨论】:

  • 我已经实现了按日期排序,我需要另一种解决方案
  • @Darek 如果您想以 10 种不同的方式(按 10 个不同的字段)对列表进行排序,您可以创建 10 个比较器,并将其传递给 Collections.sort。你可以让你的班级实施。可比,如果您愿意,可以按“默认”之类的方式对其进行排序。
猜你喜欢
  • 2018-05-15
  • 1970-01-01
  • 2012-07-25
  • 2021-07-07
  • 2013-06-06
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 2010-11-17
相关资源
最近更新 更多