在 kotlin 中根据条件使用映射函数

sag*_*uri 5 kotlin

我有一个项目列表,我想在使用它之前编辑它的值。我正在使用该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
      }
    }
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 14

您可以尝试在地图之前使用过滤器:

.filter { it.itemList.size == 1 }
Run Code Online (Sandbox Code Playgroud)


Jeg*_*abu 4

我假设您只想在满足某些条件时修改列表中的项目,否则返回未修改的相同列表。

如果您想添加一些语法糖,您可以考虑在这种情况下使用 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
}
Run Code Online (Sandbox Code Playgroud)