kotlin - 有没有办法在 Kotlin 中构造带有初始化函数的 HashSet?

标签 kotlin

Facebook Hacker Cup's 2016 中的文件中读取星星Boomerang Constelations 问题,可以定义如下扩展函数:

fun BufferedReader.readStars(n: Int): Set<Star> {
    return Array(n) {
        val (l1, l2) = readLine().split(" ").map { it.toInt() }
        Star(l1, l2)
    }.toHashSet()
}

代码是紧凑的,但值首先被读入数组,然后转换为 HashSet。有没有办法直接初始化一个 n 大小的 HashSet 和 Kotlin 中的初始化函数?

更新:标准 Kotlin 库中有现有方法吗?

最佳答案

您总是可以使用 apply 就地初始化对象:

HashSet<Star>(n).apply {
    repeat(n) {
        val (l1, l2) = readLine()!!.split(' ').map { it.toInt() }
        put(Star(l1, l2))
    }
}

如果每次都打字太不方便,写一个扩展函数:

inline fun <T> createHashSet(n : Int, crossinline fn: (Int) -> T) = HashSet<T>(n).apply {
    repeat(n) { add(fn(it)) }
}

用法:

createHashSet<Star>(n) {
    val (l1, l2) = readLine()!!.split(' ').map { it.toInt() }
    Star(l1, l2)
}

关于kotlin - 有没有办法在 Kotlin 中构造带有初始化函数的 HashSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34738702/

相关文章:

java - Google Play 拒绝了适用于全屏正确 DHU 型号的 Android Auto 应用程序

android - 我应该如何在 Android 上使用 MVVM + 数据绑定(bind)创建表单的字段验证

java - 使用Kotlin创建自定义Dagger 2示波器

kotlin - 如何检查 Kotlin 中的泛型类型?

kotlin - 非阻塞 I/O 和 Kotlin 协程有什么关系?

android - 为什么 Kotlin 数据类对象有反引号?

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

kotlin - Kotlin空检查错误

android - 在测试类中模拟和监视时获取空指针异常

java - 更新安卓模块