我正在寻找Kotlin / Java中最有效的方法,以一定数量过滤List
,并以统一的方式删除在集合中应用的过滤元素(即-要删除的元素遍及整个收集均匀);
例如
我想出了以下Kotlin扩展函数,但未按预期运行(返回的值超出了请求的数量-例如初始大小= 2593,newcount = 125-list = 130)
fun <T> List<T>.filterDownByToCount(newCount: Int): List<T> {
if (newCount < 0 || newCount >= this.size)
throw IllegalArgumentException("prop ($newCount) must be between 1 and $newCount")
val ratio = size / newCount
val list = this.filterIndexed { index, _ -> index % ratio == 0 }
return list
}
理想情况下,此函数可以处理从
0
到list.size-1
的所有内容,我想使用一个库来做到这一点(如果可能),但似乎找不到适合我的用例的任何东西。 最佳答案
问题在于size / newCount
是比率的下限,因此比率太小,因此获得的元素比预期的多。
改用天花板:
val ratio = (size + newCount - 1) / newCount
对于您的示例,这将产生一个大小为124的列表。
关于java - 在Kotlin/Java中将列表过滤到特定大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56486041/