Collections.sort(apps,new ResolveInfo.DisplayNameComparator(manager)); 这是一个排序函数。第一个参数是要排序的数组。 为什么我们需要第二个参数?第二个参数可以做什么?
答案 0 :(得分:3)
Sort第二个参数是Comparable,因此您可以提供自定义函数来比较对象。
Collections.sort(apps,new ResolveInfo.DisplayNameComparator(manager));
似乎这使用比较器按比例显示名称来比较对象。
答案 1 :(得分:0)
apps
是ResolveInfo
个对象的列表。 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;
}