Tag: 比较器

Android的 – 是否可以使用Comparator.comparing排序列表,而不是在API <24的自定义比较器?

我在我正在工作的应用程序中有一个RecyclerView,我可以填充各种项目和搜索/筛选/排序/依此类推。 目前正在分拣。 我有多个标准可以排序,可以从下拉菜单中选择。 在数据对象中排序的值包括字符串,整数和枚举,所有这些都很容易分类。 然而,尽管一些分类选项只需要一个标准,但是一些需要二级或三级标准(并且在一些非常罕见的情况下高达4个)。 为了有效地使用Collections.sort(List, Comparator) ,我需要编写相当多的自定义比较器,所以我希望有一些方法可以避免这种情况。 原来,Java 8有一个很好的解决方案: Comparator.comparing(…) ,它为您生成比较器,并可以通过Comparator.comparing().thenComparing().thenComparing()…无限地轻松扩展。 它也有List myList.sort() ,我不知道与Collections.sort(myList)相比的效率,但它感觉更清洁。 我看着它, 只是想我的运气! Android已经支持了很多Java 8function,现在已经有一段时间了! 不幸的是,Android Studio告诉我,出于某种原因, Comparator.comparing()以及List::sort只在API 24及更高版本上受支持。 这对我来说并不现实,因为我正在开发的应用程序“需要”的运行速度与API 15-16一样低。 但是,我发现这很奇怪,因为我试过的其他Java 8特性(lambdaexpression式类似于(o1, o2) -> (o1.toString().compareTo(o2.toString())和方法引用(如List::sort上面的List::sort )在我检查的范围内的所有API级别上都可以正常工作,只要您指定了针对Java 8的目标即可。而这毕竟是Java 8的事情,而不是Android的事情。 所以记住,有没有办法使Comparator.comparing()和List::sort工作在API 24之下? 我在Google搜索中没有发现任何东西,它们最终都只是指向Android的Java 8“文档”或比较器和列表的JavaDocs。 要么是Android的支持库中的东西(似乎不太可能)或像Retrolambda这样的第三方库/黑客?