forEach inside in Kachlin

时间:2017-07-20 02:15:59

标签: foreach kotlin

在Kotlin中,如果您想使用forEach的元素,则可以使用it关键字。所以现在我想知道如果我forEach内有forEach,我应该怎么做:

list.forEach {
    val parent = it
    it.forEach {
        // `it` now become the element of the parent.
    }
}

我认为仅为命名约定定义一个新变量是如此愚蠢。还有其他解决方案吗?

2 个答案:

答案 0 :(得分:56)

it只是所有单个参数闭包内的默认参数名称。您可以自己指定参数名称:

collection.forEach { customName -> 
    ...
}

答案 1 :(得分:3)

除了Artyom上面的正确答案之外,我想说的是,如果你只关心它的内部,你可以简单地忽略名称重载。

请参阅:

>>  var a = "abc"
>>  a?.let { it[2]?.let { it } }
c

返回的值是最内在的“它”。 “它”,在那里,指的是最外面的“它[2]”,即字符串“abc”中的字符“c”。

现在,如果你想访问最外面的“它”,你应该把它命名为Artyom所说的其他东西。下面的代码等同于上面的代码,但它允许您从最里面的'let'块中的外部'let'块引用“outerIt”,如果这是你需要的。

>>  var a = "abc"
>>  a?.let { outerIt -> outerIt[2]?.let { it } }
c

这样,如果你需要引用它的最外层,你可以。例如:

>>  var a = "abc"
>>  a?.let { outerIt -> outerIt[2]?.let { "${outerIt[1]} $it" } }
b c

如果你不需要参考最外面的“它”,我个人更喜欢第一个结构,因为它更简洁。