我需要这个函数来返回一个字符串,这样我就可以在另一个函数中调用它,但我得到了任何函数。如何让它返回字符串?
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()
)
我希望输出字符串分别看起来像这样122PR
或122PR#374DH
。
forEach
方法返回Unit
.您需要在其中做一些副作用(修改预先定义的一些变量)并返回此变量。但最好使用其他方法,这将立即返回您需要的内容。
根据您想从此Map
获得的确切String
,有以下几种选择:
- 如果您想获得需要
text
作为key
的第一次见面SomeAttribute
values
,那么您需要:
myMap.values.flatten().find { it.key == text }?.values?.joinToString(separator = "#")
- 如果你想在每个
List<SomeAttribute>
中获得所有第一次见面SomeAttribute
的values
,这需要text
作为key
,那么你需要:
myMap.values.flatMap { v -> v.find { it.key == text }?.values ?: emptyList() }.joinToString(separator = "#")
- 如果你想获得所有需要
text
作为List<SomeAttribute>
key
的SomeAttribute
values
,那么你需要:
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 ""
}