我正在寻找Kotlin / Java中最有效的方法,以一定数量过滤List,并以统一的方式删除在集合中应用的过滤元素(即-要删除的元素遍及整个收集均匀);

例如

  • 过滤以下内容至5 [0,1,2,3,4,5,6,7,8,9] = [0,2,4,6,8]
  • 过滤以下内容至2 [1,100,1000,10000] = [1,1000]

  • 我想出了以下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
    }
    

    理想情况下,此函数可以处理从0list.size-1的所有内容,我想使用一个库来做到这一点(如果可能),但似乎找不到适合我的用例的任何东西。

    最佳答案

    问题在于size / newCount是比率的下限,因此比率太小,因此获得的元素比预期的多。

    改用天花板:

    val ratio = (size + newCount - 1) / newCount
    

    对于您的示例,这将产生一个大小为124的列表。

    关于java - 在Kotlin/Java中将列表过滤到特定大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56486041/

    10-09 09:29