Tag: 集合

Kotlin arrayList – 不能重写列表

我正在使用名为ItemHolder的类来保存列表中的一些对象。 动态地添加一些。 在某个时候,我需要清除项目(所有这些)以添加新项目。 当我尝试从列表中获取项目时,我得到IndexOutOfBoundException。 这是我使用的代码: 在ItemHolder中 var itemList : ArrayList<Item> = arrayListOf() 在init的另一个类中: itemHolder.itemList = arrayListOf() 后来在同一个班级: itemHolder.itemList.add(position, database.getRandomData()) 和: itemHolder.getItem(position) 问题是,当我第一次使用类,它工作正常,但第二次抛出我的例外。 FATAL EXCEPTION: main Process: studio.monk.rq, PID: 2812 java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 at java.util.ArrayList.get(ArrayList.java:411) at studio.monk.rq.common.ItemHolder.getItem(ItemHolder.kt:9) at studio.monk.rq.fragments.MainFragment$onCreateView$vpPageChangeListener$1.onPageSelected(MainFragment.kt:44) at studio.monk.rq.fragments.MainFragment$onCreateView$1.run(MainFragment.kt:51) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6119) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) […]

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"]!! 我猜这是来自泛型类型有Any吗? 超类型。 为什么不能在编译时解决Map和Pair是不可变的问题?

Kotlin:泛型集合到泛型数组

如何从泛型集合中获得泛型数组 ? 我做了以下几件事: val genericArray: Array<E> = (genericCollection as java.util.Collection<E>).toArray() as Array<E> 这是正确的方式还是有一个更优雅的解决方案? 期待您的帮助! 编辑 我最终写了这个帮手扩展: fun <E> Collection<E>.toUntypedArray(): Array<E> { @Suppress("UNCHECKED_CAST") return arrayOf(size, this) as Array<E> } 有没有人有这个问题的更好的解决方案?

有没有办法过滤掉null Any? Kotlin地图中的值?

我想通过应用一个函数来考虑一个允许Map<String, Any?>对象作为Map<String,Any>类型推断的函数。 我对Kotlin中的转换函数filterValues filterNot ,并试图在地图上显示各种filter和filterValues filterNot ,如下所示: val input = mapOf(Pair("first",null)) val filtered: Map<String,Any> = input.filter { it.value!=null } 它也没有与这些任何编译 input.filterValues { it!=null } input.filterNot { it.value==null } input.filterNot { it.value is Nothing } 我似乎得到最接近的是应用多个步骤或有一个未经检查的转换警告。 我会认为过滤值为!=null就足够了。 我唯一的想法是,这是由于泛型?

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

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

kotlin集合将一个Map转换为一个新的Map,其中的值由原始值计算得出

我是Kotlin的新手,我试图总结一个查询。 我有一个Map<Int, List<Objects>>与Int:Month和List<Objects>在该月的所有操作过程。 我现在要做的是得到一个Map<Int, Long> Long:所有操作的count()。 我已经通过地图,mapValues,折叠…但没有得到正确的答案。

什么是Iterable的行为#all&为什么Kotlin Char :: class.java!= char.javaClass

我正在尝试kotlin中的一个例子,如: fun test(){ val harfler = listOf("a","b",'c','d') println(harfler.all { it.javaClass == String::class.java || it.javaClass == Char::class.java }) } List包含Char或者String但是这个表达式中的all函数all返回false ,为什么返回false ? 有人可以解释吗? 编辑 @JBNizet

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

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

如何从kotlin中的花药创建一个新的列表?

在Java中,我们可以像这样创建一个新的列表: List<Integer> list1 = new ArrayList<>(); list1.add(1) list1.add(-10) list1.add(12) list1.add(37) List<Integer> list2 = new ArrayList<>(list1); 我们如何使用listOf()或mutableListOf()在kotlin中达到上述相同的结果? 谢谢

如何在Kotlin中使用不可变的持久集合?

我想在Kotlin中使用像Clojure所使用的不可变持久集合。 我可以使用哪些库(在JVM和Javascript中)? 他们如何与Kotlin整合?