Tag: 排序

Kotlin按值排序数组

让我们有一个class Player(val position: Int, val time: Float) ,我们要排序的arrays或players列表的position 。 如果这些players中的一些在排序后有相同的position ,我们希望按time分组。 我的意思是一组players的位置相同。 我知道 list.sortedWith(compareBy { it.a }.thenByDescending { it.b }.thenBy { it.c }) 但当然这并不能解决这个问题。 Kotlin有没有什么聪明的方法来完成这个简单的任务? 我们可以通过检查位置和交换项目来手动排序,但是我想知道在这种情况下Kotlin是否有话要说。

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这样的第三方库/黑客?

如何排序Kotlin MutableList

我来自Java背景,我有一个简单的数组: var statues: MutableList = mutableListOf() statues.add(1) statues.add(3) statues.add(2) var sortedArray: MutableList = mutableListOf() sortedArray = statues.sortedArray() 我如何排序这个简单的数组,并存储在variablessortedArray?

排序可能包含数字的字符串

我需要编写一个比较字符串的Java比较器类,然而只有一个转折点。 如果它比较的两个字符串在字符串的开始和结尾是相同的,并且不同的中间部分是整数,则根据这些整数的数值进行比较。 例如,我需要下列字符串才能显示出来: AAA bbb 3 ccc bbb 12 ccc ccc 11 DDD eee 3 ddd jpeg2000 eee eee 12 ddd jpeg2000 eee 正如你所看到的,字符串中可能还有其他整数,所以我不能只用正则expression式来分解任何整数。 我想从一开始就走字符串,直到find一个不匹配的位,然后从最后走到最后find一个不匹配的位,然后比较中间位和正则expression式“[0-9] +”,如果比较,则进行数字比较,否则进行词法比较。 有没有更好的办法? 更新我不认为我可以保证字符串中的其他数字,可以匹配的数字,周围没有空格,或者不同的数字有空格。

Kotlin:排序| 交换操作的位置

我在Kotlin中实现了Quicksort算法。 为此,我使用types参数和单个函数( sort)创建了一个接口ISort 。 为了排序,我需要交换操作。 我想知道这个交换function的最佳位置是什么。 我的想法: 1)不幸的是,在Kotlin中,不能使接口function得到保护。 因此,每个class级都可以在其实施中看到交换,这并不太好(尽管也不算太差,我同意)。 2)把它放在QuickSort实现中更糟,因为可能有几个需要交换function的ISort接口的实现。 3)我的下一个想法是创建一个单例对象,但Kotlin允许具有types参数的对象。 这里是接口定义: interface ISort { fun sort(toSort: MutableList): MutableList // 1) Putting swap here has a too high visibility } 这里是QuickSort类的框架: class QuickSort : ISort { override fun sort(toSort: MutableList): MutableList { doQuickSort(toSort) // Internally uses swap return toSort } // 2) Putting swap here […]

Kotlin – 排序地图集合

我有一个function fun init(properties: Collection<Map>?) { properties?. filter { it.isNotEmpty() }?. } 1)我需要过滤空值。 2)我只需要地图所有的键和值作为字符串。 3)对于我想要的每个剩余的地图:for each keys in each map get a value。 我怎么能这样做。 对不起,我是Kotlin的新人。