Kotlin - 需要返回类型字符串,但得到了任何



我需要这个函数来返回一个字符串,这样我就可以在另一个函数中调用它,但我得到了任何函数。如何让它返回字符串?

private fun getValue(text: String){
myMap.forEach { (k, v) -> v.find {it.key == text}?.values?.joinToString(separator = "#") ?: ""}}

myMap是一个Map<UUIDint, List<SomeAttribute>>

SomeAttribute 是一个数据类

data class SomeAttribute(
var key: String = "",
var values: List<String> = ArrayList()
)

我希望输出字符串分别看起来像这样122PR122PR#374DH

forEach方法返回Unit.您需要在其中做一些副作用(修改预先定义的一些变量)并返回此变量。但最好使用其他方法,这将立即返回您需要的内容。

根据您想从此Map获得的确切String,有以下几种选择:

  1. 如果您想获得需要text作为key的第一次见面SomeAttributevalues,那么您需要:
myMap.values.flatten().find { it.key == text }?.values?.joinToString(separator = "#")
  1. 如果你想在每个List<SomeAttribute>中获得所有第一次见面SomeAttributevalues,这需要text作为key,那么你需要:
myMap.values.flatMap { v -> v.find { it.key == text }?.values ?: emptyList() }.joinToString(separator = "#")
  1. 如果你想获得所有需要text作为List<SomeAttribute>keySomeAttributevalues,那么你需要:
myMap.values.flatMap { v -> v.filter { it.key == text } }.map { it.values }.joinToString(separator = "#")

如果您希望它返回它的第一个匹配项,您可以这样做:

private fun getValue(text: String) : String {
myMap.forEach { (_, v) -> v.find {it.key == text}?.values?.joinToString(separator = "#")?.let { return it }}
return ""
}

相关内容

最新更新