gpt4 book ai didi

java - Android - 是否可以使用 Comparator.comparing 而不是 API < 24 上的自定义比较器对列表进行排序?

转载 作者:搜寻专家 更新时间:2023-10-30 21:29:42 24 4
gpt4 key购买 nike

我正在开发的应用程序中有一个 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 之类的方法引用)在我检查过的范围内的所有 API 级别上都可以正常工作,只要您指定目标是 Java 8。毕竟这是 Java 8 的东西,不是Android 的东西。

考虑到所有这些,有没有办法让 Comparator.comparing()List::sort 在 API 24 以下工作?我在 Google 搜索中没有找到任何内容,它们最终都指向 Android 的 Java 8“文档”或比较器和列表的 JavaDocs。 Android 支持库之一(似乎不太可能)或第三方库/hack,如 Retrolambda

最佳答案

尝试将一些 java 8 功能移植到 java 6/7 的 streamsupport 库: https://github.com/streamsupport

他们有你需要的类(class): https://github.com/streamsupport/streamsupport/blob/master/src/main/java/java8/util/Comparators.java(它从 Comparator 重命名为 Comparators 只是为了避免名称冲突)。

关于java - Android - 是否可以使用 Comparator.comparing 而不是 API < 24 上的自定义比较器对列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48648152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com