Collections.sort

时间:2011-05-04 13:55:09

标签: android

Collections.sort(apps,new ResolveInfo.DisplayNameComparator(manager)); 这是一个排序函数。第一个参数是要排序的数组。 为什么我们需要第二个参数?第二个参数可以做什么?

2 个答案:

答案 0 :(得分:3)

Sort第二个参数是Comparable,因此您可以提供自定义函数来比较对象。

  

Collections.sort(apps,new ResolveInfo.DisplayNameComparator(manager));

似乎这使用比较器按比例显示名称来比较对象。

答案 1 :(得分:0)

appsResolveInfo个对象的列表。 ResolveInfo不是Comparable,这意味着因为它没有实现Comparable接口,所以没有关于如何比较两个ResolveInfo对象的“规则”。 sort(List<T> list)方法要求列表中的对象具有可比性:

public static <T extends Comparable<? super T>> void sort(List<T> list)

DisplayNameComparator定义了如何通过它们所代表的应用程序的显示名称来比较ResolveInfo个对象的逻辑。

源代码:

  public static class DisplayNameComparator
        implements Comparator<ResolveInfo> {
    public DisplayNameComparator(PackageManager pm) {
        mPM = pm;
        mCollator.setStrength(Collator.PRIMARY);
    }

    public final int compare(ResolveInfo a, ResolveInfo b) {
        CharSequence  sa = a.loadLabel(mPM);
        if (sa == null) sa = a.activityInfo.name;
        CharSequence  sb = b.loadLabel(mPM);
        if (sb == null) sb = b.activityInfo.name;

        return mCollator.compare(sa.toString(), sb.toString());
    }

    private final Collator   mCollator = Collator.getInstance();
    private PackageManager   mPM;
}