我有一个项目列表,我想在使用之前编辑其值。我正在使用map
函数来更新其中的每个项目。但这里的问题是,我只想在列表大小为 1 时更新项目。如果大小大于 1,我想按原样返回列表。我怎样才能做到这一点?
myList.map {
if(resources.getBoolean(R.bool.is_tablet) && it.itemList.size<6 && it.layerType == DOUBLE_LIST) {
it.layerType = SINGLE_LIST_AUTO
it.itemList.forEach {sectionItem->
sectionItem.layerType = SINGLE_LIST_AUTO
}
it
}else{
it
}
}
您可以尝试在映射之前使用过滤器:
.filter { it.itemList.size == 1 }
我假设您只想在满足某些条件时才修改列表中的项目,否则返回相同的列表未修改。
如果你想添加一些语法糖,你可以考虑在这个场景中使用 takeIf { }
fun updateItemsInMyList(myList:List<SomeClass>): List<SomeClass> {
return myList
.takeIf {
// condition to modify items in your list
it.size > 1 && otherConditions
}
?.apply {
//update your items inside the list
}
?: myList // return the unmodified list if conditions are not met
}
如果我正确理解您的问题,您想检查myList
是否只包含一个其他值,您希望更新值并返回它。您可以按照以下思路做一些事情,
myList.singleOrNull ?: myList.map {
if(resources.getBoolean(R.bool.is_tablet) && it.itemList.size<6 && it.layerType == DOUBLE_LIST) {
it.layerType = SINGLE_LIST_AUTO
it.itemList.forEach {sectionItem->
sectionItem.layerType = SINGLE_LIST_AUTO
}
it
}else{
it
}
}
return myList
基本上,检查列表中是否只有一个值,如果是,则返回该值。如果没有(你得到 null(,那么你可以映射值。