Tag: 集合

编译为Javascript时使用Kotlin的Java标准库

我在Kotlin中实现了一个在浏览器中使用的库。 当我将其编译为Javascript时,找不到Java标准lib的依赖项,例如像PriorityQueue这样的集合类。 是否有可能说服编译器查找和编译这些类,或者是否有预编译的Javascript-Java标准库,还是只能使用Kotlin标准库?

Kotlin:暴露API中的不可变列表

我是Kotlin的新手,并且正在解决返回不可变内部可变列表版本的问题。 我回顾了下面的’ Kotlin:通过转换修改(不可变的)列表,是否合法? ‘并理解不可变列表实际上只是只读的视图,不公开修改方法。 我想要一个暴露“不可变”列表的类,并且仍然想要利用Kotlins自动获取器(不必提供获取列表或列表成员的所有样板) 下面是一个坏主意(或者它会导致在将来的版本中可能被阻止的问题) class Foo { val names: List = LinkedList; fun addName(name: String) { (names as LinkedList).add(name) } } 我正在寻找允许(例如): val foo = Foo; println(foo.names.size) 但仍然阻止调用者修改类的内部(至少尽可能)。 例如删除元素或清除后备列表。

Kotlin:大量的ConsPStack,我该如何避免?

我如何避免由我的应用程序创建的大量ConsPStack ? 什么时候创建? 我的申请: https : //github.com/Jire/Abendigo

Kotlin Map非空值

假设我有一张地图将一张纸牌的字母翻译成一个整数 val rank = mapOf(“J” to 11, “Q” to 12, “K” to 13, “A” to 14) 在使用地图时,即使Map和Pair是不可变的,我总是必须做一个空的安全检查: val difference = rank[“Q”]!! – rank[“K”]!! 我猜这是来自genericstypes有没有? 超types。 为什么不能在编译时解决Map和Pair是不可变的问题?

如何将数组列表中的特定项目移动到第一项

例如:一个列表 ABCDE 给定C,切换到 CABDE 注意数组的大小会改变,有些项目可能在运行时间被删除 Collections.swap(url, url.indexOf(itemToMove), 0); 这个语句是不行的,因为它输出CBADE不是CABDE,怎么解决? 谢谢。

Kotlin的名单缺少“添加”,“删除”等?

在Java中,我们可以做到以下几点 public class TempClass { List myList = null; void doSomething() { myList = new ArrayList(); myList.add(10); myList.remove(10); } } 但是如果我们直接把它改写成Kotlin如下 class TempClass { var myList: List? = null fun doSomething() { myList = ArrayList() myList!!.add(10) myList!!.remove(10) } } 我得到了没有find我的列表中add和removefunction的错误 我将其转换为ArrayList,但这是奇怪的需要投它,而在Java铸造不是必需的。 而这就打破了抽象类List的目的 class TempClass { var myList: List? = null fun doSomething() { myList = […]

什么Java 8 Stream.collect等价物在标准Kotlin库中可用?

在Java 8中,有Stream.collect ,它允许在集合上进行聚合。 在Kotlin中,这不是以同样的方式存在,除了可能作为stdlib中扩展函数的集合。 但是不清楚不同用例的等价关系是什么。 例如, JavaDoc for Collectors的顶部是为Java 8编写的示例,将它们移植到Kolin时,不能在不同的JDK版本上使用Java 8类,因此可能应该使用不同的方式编写。 就在线资源展示Kotlin集合的例子而言,它们通常是微不足道的,并没有真正与相同的用例相比较。 什么是真正符合Java 8 Stream.collect记录的案例的好例子? 这里的列表是: 将名字积累到列表中 将名称累加到TreeSet中 将元素转换为字符串并连接它们,用逗号分隔 计算员工的工资总额 按部门分组员工 按部门计算工资总额 将学生划分为通过和失败 上面链接了JavaDoc中的细节。 注意: 这个问题是由作者故意写的和回答的( 自我回答的问题 ),所以对于常见的Kotlin话题的习惯性的回答是在SO中。 此外,为了澄清一些真正的古老的答案写为科特林的阿尔法,是不是今天的Kotlin准确。

Kotlin:通过转换修改(不可变的)列表,这是否合法?

我们知道Kotlin中的列表是不可变的,也就是说你不能像下面那样添加和删除。 class TempClass { var myList: List? = null fun doSomething() { myList = ArrayList() myList!!.add(10) myList!!.remove(10) } } 但是如果我们像下面那样将它转换为ArrayList,则添加和删除工作。 class TempClass { var myList: List? = null fun doSomething() { myList = ArrayList() (myList!! as ArrayList).add(10) (myList!! as ArrayList).remove(10) } } 我只是觉得这很奇怪,因为myList实际上是一个List,它被认为是不可变的。 并铸造它,让它被改变。 上面做了什么(铸造到数组并修改内容)是合法的,还是语言需要改进来禁止呢?

如何在Clojure中快速移除向量中的元素?

我试图从Clojure向量中移除元素: 请注意,我正在使用Kotlin的Clojure操作 val set = PersistentHashSet.create(“foo”) val vec = PersistentVector.create(“foo”, “bar”) val seq = clojure.`core$remove`.invokeStatic(set, vec) as ISeq val resultVec = clojure.`core$vec`.invokeStatic(seq) as PersistentVector 这相当于下面的Clojure代码: (remove #{“foo”} [“foo” “bar”]) 代码工作正常,但我注意到,从seq创建一个向量非常慢。 我写了一个基准,结果如下: | Item count | Remove ms | Remove with converting back to vector ms| —————————————————————– | 1000 | 51 | 1355 | | 10000 […]

使用一个对象来实现一个空List的错误

我试图重写列表接口作为学习function编程Kotlin的练习,但我无法弄清楚为什么我得到一个错误,当我试图让一个对象作为空的列表,在Kotlin标准库中不会发生。 在我的代码中,见下面,我想使用NIL作为单例空列表,使用list()作为函数返回它。 但是,这会在types为“必需列表”的函数上生成types不匹配错误。findNIL“ interface List { val empty: Boolean val head: A val tail: List fun cons(a: A): List = Cons(a, this) } object NIL : List { override val empty: Boolean = true override val head: Nothing get() = throw IllegalStateException(“head called on empty list”) override val tail: List get() = throw IllegalStateException(“tail called […]