Tag: 集合

Set中的重复项

在Kotlin中,我有一个数据类的MutableSet 。 数据类不会覆盖equals()或hashCode() 。 我一直在遇到涉及集合中重复对象的错误,并且我注意到调用foo.containsAll(foo)为该集合返回false 。 我经历了集合中的每个项目,只有少数返回false为foo.contains(foo.toList()[i]) 。 对于那些,调用foo.toList()[i] == foo.toList()[i]返回true 。 所以,平等检查工作。 这里发生了什么?

Kotlin用集合中的lastOrNull()替换isEmpty()和last()

我想使用类似(代码如下),但我认为必须有使用lastOrNull()而不是使用isEmpty和last()的更好的解决方案, data class Entry(val x: Float, val y: Float) var entries: MutableList = ArrayList() if(some) { entries.add(Entry(100f, 200f) } val foo = (if (entries.isEmpty()) 0f else entries.last().y) + 100f 有没有更好的方法像entries.lastOrNull()?.y if null 0f ?

我如何在Kotlin中无限重复一个序列?

我想在一个Sequence无限重复T元素。 这不能使用kotlin.collections.asSequence完成。 例如: val intArray = intArrayOf(1, 2, 3) val finiteIntSequence = intArray.asSequence() val many = 10 finiteIntSequence.take(many).forEach(::print) // 123 这不是我想要的。 我期望某种types的kotlin.collections.repeat函数存在,但没有,所以我自己实现了一个(例如对于这个IntArray ): var i = 0 val infiniteIntSequence = generateSequence { intArray[i++ % intArray.size] } infiniteIntSequence.take(many).forEach(::print) // 1231231231 这是非常必要的,所以我觉得必须有一个更实用,更不详细的方法来做到这一点。 如果存在的话,那么Kotlin的标准方法是什么?重复收集/排列a(n)(in)有限的时间?

Kotlins扩展方法Stream.toList()丢失

我试图将一个流转换为kotlin中正确的types列表。 对于这种情况,kotlin提供了扩展方法Stream.toList() 。 这个方法位于kotlin.streams 。 IDE(IntelliJ)不允许在流上调用此方法。 我是否必须添加一个特殊的依赖项,或者它是否应该成为标准库的一部分? 我正在使用maven,并且存在对kotlin-stdlib-jdk8 1.2.10的依赖。 注意:流是从库函数返回的,所以我必须使用它。 请不要回答像“在kotlin你不使用流…”。

Lint认为Kotlin MutableMap.forEach()是java.util.Map.forEach()

我在Android项目中使用Kotlin的MutableMap。 并试图做一些行动每个项目。 所以这里是我的代码。 private val uris: MutableMap = mutableMapOf() // … Fill the items here … uris.forEach { val ref = FirebaseFirestore.getInstanse().reference uploadFile(ref, it.value) } 在运行时,一切正常,但我的CI构建失败,下面的lint错误: MyActivity.kt:142: Error: Call requires API level 24 (current min is 16): java.util.Map#forEach [NewApi] uris.forEach { ~~~~~~~ 我知道在min sdk是24之前我们不能使用JDK-8的Map项目。但是为什么lint会把它看作是JDK-8的Map? 有关更多信息,我尝试从AS中的Kotlin Bytecode选项获取Java代码,并发现forEach按预期方式被替换为while循环和迭代器。 那么可能是什么原因以及如何解决呢? 任何主角将不胜感激。