0

下面的代码是我用来按字母顺序对 ListView 进行排序的代码:

 case R.id.menu_order_name:
    adapter.sort(new Comparator<Shop>() {
        @Override
        public int compare(Shop arg0, Shop arg1) {
            return arg0.getName().compareTo(arg1.getName());
        }
    });
    this.setListAdapter(adapter);
    adapter.notifyDataSetChanged();
    return true;

当我单击它按 AZ 排序时,虽然当我再次单击 ActionBar 菜单选项进行排序时,我希望它按 ZA 排序。谁能告诉我如何颠倒排序的顺序?

在此先感谢,所有帮助将不胜感激!

4

1 回答 1

2

查看以下文档String.compareTo()

如果字符串相等则返回
0,如果此字符串在指定字符串之前则返回负整数,如果此字符串在指定字符串之后则返回正整数。

换句话说:简短的回答是反转您当前返回的值Comparator。最快的方法是简单地乘以-1,因为:

-1 * -1 =  1
 0 * -1 =  0
 1 * -1 = -1

这将有效地反转相对于原始的排序顺序Comparator。在代码中:

adapter.sort(new Comparator<Shop>() {
    @Override public int compare(Shop arg0, Shop arg1) {
        return -arg0.getName().compareTo(arg1.getName());
    }
});

然而,由于这是一个非常常见的用例,我们可以通过利用 Java 提供的功能来更容易地做到这一点。可以说原件ComparatoraToZComparator; 我们可以使用Collections实用程序来反转它:

adapter.sort(Collections.reverseOrder(aToZComparator);

这将基本上应用反转比较结果的相同概念,并有效地将您更改aToZComparatorzToAComparator.

我会让你自己弄清楚何时选择 which 的逻辑Comparator

于 2013-09-11T21:31:42.427 回答