java - 在Kotlin/Java中将列表过滤到特定大小

标签 java kotlin collections

我正在寻找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/

    相关文章:

    kotlin - 我在手机上打开互联网后, retrofit 和 okhttp 将无法工作

    .net - 为什么我要把我的元素放在袋子里?

    Java 列表泛型具有多个边界

    generics - 具有泛型返回类型的函数

    java - 有SortedMap<String, String>,需要SortedMap<String,Serialized>。该怎么办?

    java - 防止AMQP队列消费者中的无限循环

    java - 在java类中制作卡片组

    java - 将自定义设置数据结构转换为列表java

    java - EditText无故调整大小

    java - 找不到字段的 getter