我在我正在开发的应用程序中有一个RecyclerView,我可以填充各种项目并搜索/过滤/排序等等。目前正在进行排序。
我有多个可以排序的标准,可以从下拉式微调器中选择。在数据对象中排序的值包括字符串,整数和枚举,所有这些都很容易排序。然而,虽然一些排序选项只需要一个标准,但有些标准需要二级或三级标准(在一些极少数情况下最多需要4个标准)。为了有效地使用,我必须编写相当多的自定义比较器 Collections.sort(List, Comparator)
所以我希望可能有某种方法可以避免这种情况。
事实证明,Java 8有一个很好的解决方案: Comparator.comparing(...)
,它可以为您生成比较器,并且可以通过无限期地轻松扩展 Comparator.comparing().thenComparing().thenComparing()...
。它也有 List myList.sort()
,我不确定与之相比的效率 Collections.sort(myList)
,但对我来说感觉更干净。我调查了一下,然后想了想 只是我的运气! Android已经支持许多Java 8功能了一段时间了!
不幸的是,Android Studio告诉我,出于某种原因, Comparator.comparing()
以及 List::sort
仅在API 24及更高版本上受支持。这对我来说实际上不起作用,因为我正在研究的应用程序“需要”运行低至API 15-16。然而,我发现这很奇怪,因为我尝试过的其他Java 8功能(lambda表达式如 (o1, o2) -> (o1.toString().compareTo(o2.toString())
和方法参考 List::sort
只要你指定目标Java 8,我就可以在我检查的范围内的所有API级别上正常工作。毕竟它是Java 8的东西,而不是Android的东西。
所以考虑到所有这些,有没有办法 Comparator.comparing()
和 List::sort
在API 24以下工作?我在谷歌的搜索中没有找到任何东西,它们最终只是指向Android的Java 8“文档”或者指向Comparator和List的JavaDocs。在Android的一个支持库(似乎不太可能)或第三方库/ hack之类的东西 Retrolambda?