在 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
      }
    }

您可以尝试在映射之前使用过滤器:

.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(,那么你可以映射值。

最新更新