Ver*_*mCH 11 java sorting android comparator java-8
我在我正在开发的应用程序中有一个RecyclerView,我可以填充各种项目并搜索/过滤/排序等等.目前正致力于排序.
我有多个可以排序的标准,可以从下拉式微调器中选择.在数据对象中排序的值包括字符串,整数和枚举,所有这些都很容易排序.然而,虽然一些排序选项只需要一个标准,但有些标准需要二级或三级标准(在一些极少数情况下最多需要4个标准).为了有效地使用Collections.sort(List, Comparator),我必须编写相当多的自定义比较器,所以我希望可能有某种方法可以避免这种情况.
事实证明,Java 8有一个很好的解决方案:Comparator.comparing(...)它为您生成Comparators,并且可以通过无限期的方式轻松扩展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功能((o1, o2) -> (o1.toString().compareTo(o2.toString())像List::sort上面的lambda表达式和方法引用一样)在我检查的范围内的所有API级别上工作正常,只要您指定定位Java 8.毕竟它是Java 8的东西,而不是Android的东西.
因此,考虑到所有这些,有没有办法在API 24下制作Comparator.comparing()和List::sort工作?我在谷歌的搜索中没有找到任何东西,它们最终只是指向Android的Java 8"文档"或JavaDocs for Comparator和List.Android的支持库(似乎不太可能)或第三方库/像Retrolambda这样的东西?
尝试使用streamsupport库将一些java 8特性移植到java 6/7:https: //github.com/streamsupport
他们有你需要的类:https:
//github.com/streamsupport/streamsupport/blob/master/src/main/java/java8/util/Comparators.java
(它被重命名Comparator为Comparators仅避免名称冲突).