如何在 kotlin simple

问题描述

我有一个包含 (1,2,null,3...) 的数组,我想为每个循环创建一个以仅获取值。我在许多不同方面都需要这个,所以如果有人能告诉我一个简单的方法来管理它会很好。

我希望 1,3 ... 在一个数组中但没有空值。我是初学者,我在其他地方找不到我的问题的答案。

解决方法

Kotlin 非常强调使用函数来转换集合,而不是自己编写 for 循环。有 a lot of functions,但两个非常重要的是 mapfilter

mapevery 元素转换为其他元素 - 它将每个元素映射到另一个元素。

listOf(1,2,3).map { it * 2 }
>> [2,4,6]

filter 删除 与您传入的谓词不匹配的元素(一个为匹配返回 true 的函数) - 它保留那些匹配的元素,基本上(你是过滤掉那些没有的)

listOf(1,3).filter { it > 1 }
>> [2,3]

在这种情况下,您希望过滤掉数组中的 null 值。所以你可以这样做:

arrayOf(1,null,3).filter { it != null }
>> [1,3]

所以过滤器只允许通过非空的东西,对吧? 还有一个 filterNot 函数,它翻转谓词逻辑 - 它只允许通过匹配的东西:

arrayOf(1,3).filterNot { it == null }
>> [1,3]

所以现在我们要检查每个项目是否 null,并且只有在为真时才保留它。您可以采用任何一种方式,以更易读的方式进行。

重点是处理空值的特殊情况 - filterNotNull 基本上删除任何空值:

arrayOf(1,3).filterNotNull()
>> [1,3]

还有一个 mapNotNull 函数,它是一个 map,它也可以删除任何空值,这有时很方便。


所有这些函数的重要一点是它们通常返回一个 List,所以如果你真的想要一个 Array,你需要在最后调用 toTypedArray()

arrayOf(1,3).filterNotNull().toTypedArray()

但通常您在 Kotlin 中更多地使用列表,尤其是在处理集合时。

绝对值得通读以熟悉以下内容: Collections overview

左侧有几个部分,但这是您需要了解的内容(即使您不会记住所有内容!)