计算ListView排序而忽略Android中的前导“The”

时间:2012-08-30 19:45:25

标签: android sorting android-listview android-arrayadapter

我有一个由{3} ListView填充的ArrayList

itemsratingscomments

但是,我需要通过忽略前导'the'来对项目进行排序。我已经通过使用items重新排列ArrayList Collections.sort来完成此操作(请参阅下面的代码),但这是问题:评论和评分不会重新排列,因此它会出现故障在ListView

例如,如果列表是:

  1. 汽车3 4
  2. 人5 3
  3. The Animals 7 4
  4. items排序后我得到了:

    1. 动物3 4
    2. 汽车5 3
    3. People 7 4
    4. 所以items按照我的意愿排队,但关联的commentsratings没有排序。我不确定如何实现这一点以及将它放在何处。我想在ArrayAdapter中?

      以下是我更改items列表的代码:

              Comparator<String> ignoreLeadingThe = new Comparator<String>() {
                  public int compare(String a, String b) {
                      a = a.replaceAll("(?i)^the\\s+", "");
                      b = b.replaceAll("(?i)^the\\s+", "");
                      return a.compareToIgnoreCase(b);
                  }
              };
      
              Collections.sort(items, ignoreLeadingThe);
      

      这是问题吗?我可以在何处以及如何根据项目列表的位置对评级和评论列表进行排序?

      修改:

      这是我的ArrayAdapter中的getView代码:

          ItemObject io = getItem(position);
          String name = io.name;
          String total = io.total;
          String rating = io.ratings;
          String comment = io.comments;
      
          holder.t1.setText(name);
          holder.t2.setText(total);
          holder.t3.setText(comment);
          holder.t4.setText(rating);
      

      注意:在上面的示例中,我没有提及第4个ArrayList total

1 个答案:

答案 0 :(得分:2)

你应该看一下创建一个类来将你的项目包装在ArrayList中,如下所示:

class MyItem {
    String item;
    int ratings;
    int comments;
}

然后改为使用这些对象的ArrayList:

List<MyItem> myList = new ArrayList<MyItem>();

然后在你的比较器中,就像你正在做的那样,但是针对MyItem.item而不仅仅是ab进行测试。像这样:

Comparator<MyItem> ignoreLeadingThe = new Comparator<MyItem>() {
    public int compare(MyItem a, MyItem b) {
        a.item = a.item.replaceAll("(?i(^the\\s+", "");
        b.item = b.item.replaceAll("(?i(^the\\s+", "");
        return a.item.compareToIgnoreCase(b.item);
    }
};

Collections.sort(myList, ignoreLeadingThe);