Kotlin内置函数接受Int,但我希望传递Long

Kotlin内置函数接受Int,但我希望传递Long,kotlin,Kotlin,科特林: 获取和 takeLast 所有函数都接受Int值,但调用它们的列表的大小大于Int可以处理的大小 如何处理这种情况?Kotlin定义了一个在LongArray上工作的takelast版本: fun LongArray.takeLast(n: Int): List<Long> funlongarray.takeLast(n:Int):列表 对输入参数的限制只是可以从目标数组中“获取”多少项中的一项。这真的是你的问题吗?是否确实要从目标数组中获取超过Int.MAX_值的项?

科特林:

获取
takeLast

所有函数都接受
Int
值,但调用它们的列表的大小大于
Int
可以处理的大小


如何处理这种情况?

Kotlin定义了一个在
LongArray
上工作的
takelast
版本:

fun LongArray.takeLast(n: Int): List<Long>
funlongarray.takeLast(n:Int):列表

对输入参数的限制只是可以从目标数组中“获取”多少项中的一项。这真的是你的问题吗?是否确实要从目标数组中获取超过Int.MAX_值的项?如果是这样,那么您就不能使用这个函数,因为没有一个版本的函数可以接受一个
Long
来表示从数组中获取的值的数量


您所说的数组中的值是什么?如果它们是
Int
s,那么您所说的是8GB传输。而且您必须在阵列中至少有这么多的空间才能进行复制,因此您所说的是,此操作的源和目标的内存空间超过16GB。我不敢相信这就是我们在谈论的。即使它们是字节值,在内存中以这种方式进行的2GB传输对我来说也没有任何意义。您的用例是什么?

Kotlin定义了一个在
LongArray
上工作的
takelast
版本:

fun LongArray.takeLast(n: Int): List<Long>
funlongarray.takeLast(n:Int):列表

对输入参数的限制只是可以从目标数组中“获取”多少项中的一项。这真的是你的问题吗?是否确实要从目标数组中获取超过Int.MAX_值的项?如果是这样,那么您就不能使用这个函数,因为没有一个版本的函数可以接受一个
Long
来表示从数组中获取的值的数量


您所说的数组中的值是什么?如果它们是
Int
s,那么您所说的是8GB传输。而且您必须在阵列中至少有这么多的空间才能进行复制,因此您所说的是,此操作的源和目标的内存空间超过16GB。我不敢相信这就是我们在谈论的。即使它们是字节值,在内存中以这种方式进行的2GB传输对我来说也没有任何意义。您的用例是什么?

至少对于
take
没有什么可以阻止您创建自己的扩展函数:

fun <T> Iterable<T>.take(n: Long): List<T> {
    require(n >= 0) { "Requested element count $n is less than zero." }
    if (n == 0L) return emptyList()
    if (this is Collection<T>) {
        if (n >= size) return toList()
        if (n == 1L) return listOf(first())
    }
    var count = 0L
    val list = ArrayList<T>()
    for (item in this) {
        list.add(item)
        if (++count == n)
            break
    }
    return list
}
funiterable.take(n:Long):列表{
require(n>=0){“请求的元素计数$n小于零。”}
如果(n==0L)返回空列表()
如果(这是集合){
如果(n>=size)返回toList()
if(n==1L)返回listOf(first())
}
变量计数=0L
val list=ArrayList()
对于(本文件中的项目){
列表。添加(项目)
如果(++count==n)
打破
}
返回列表
}

takeLast
有点复杂,因为列表只使用
Int
进行其他一些操作(如
get
size
)。但您可以随时查看并调整。

至少对于
take
没有任何东西可以阻止您创建自己的扩展函数:

fun <T> Iterable<T>.take(n: Long): List<T> {
    require(n >= 0) { "Requested element count $n is less than zero." }
    if (n == 0L) return emptyList()
    if (this is Collection<T>) {
        if (n >= size) return toList()
        if (n == 1L) return listOf(first())
    }
    var count = 0L
    val list = ArrayList<T>()
    for (item in this) {
        list.add(item)
        if (++count == n)
            break
    }
    return list
}
funiterable.take(n:Long):列表{
require(n>=0){“请求的元素计数$n小于零。”}
如果(n==0L)返回空列表()
如果(这是集合){
如果(n>=size)返回toList()
if(n==1L)返回listOf(first())
}
变量计数=0L
val list=ArrayList()
对于(本文件中的项目){
列表。添加(项目)
如果(++count==n)
打破
}
返回列表
}

takeLast
有点复杂,因为列表只使用
Int
进行其他一些操作(如
get
size
)。但您可以随时查看并调整。

只是为了确保:您有一个包含多个
2^31-1
元素的列表,而且它本身已经可以正常工作了?您真的想从值列表中获取2147483647个以上的项吗?首先不支持大于Int.MAX_值的数组/列表。请确保:您的列表包含的元素超过
2^31-1
个,它本身已经可以正常工作了?您真的想从值列表中获取2147483647个以上的项吗?首先不支持大于Int.MAX_值的数组/列表。