首页 > 解决方案 > Kotlin - 在嵌套列表中搜索

问题描述

我的问题是关于算法的。

此响应是从后端发送的

"categoryList": [
      {
        "benefitList": [
          {
            **1**
            "carType": "SEDAN",
          },
          {  
          **2**  
            "carType": "SEDAN", 
          }
        ],

        "title": "Volvo",

      },
      
      {
        "benefitList": [
          {
            **3**
            "carType": "SEDAN",
        
          },
          {
            **4**
            "carType": "HATCHBACK",
          },
              
          
        ],

        "title": "Mercedes",
      
      }
]

categoryList -> parentList benefitList -> nestedList

我想按 carType 过滤并希望得到这样的列表

"categoryList": [
      {
      
        "benefitList": [
          {
            **4**
            "carType": "HATCHBACK",
          },
              
          
        ],
        "title": "Mercedes",
     
      }
]

但是当我像这样过滤这段代码时

categoryList.filter { categoryDto ->
            categoryDto.benefitList.any { cardDto ->
                cardDto.authType == HATCHBACK 
            }
        }

HATCHBACK 项目正确转动,但 SEDAN 带有 HATCHBACK

如果我说数字,则返回34项。

有人可以帮助我吗?我只想在没有3的情况下达到4项?

标签: androidkotlinfilter

解决方案


请注意,您无法通过简单的过滤等方式解决此问题,因为实际上您需要创建一个全新的categoryDto对象(或修改现有对象)。你没有categoryDtowith 4,但3在你的原始数据结构中没有,所以你需要创建它。

根据创建 dto 的方式,它可能类似于:

categoryList.mapNotNull { categoryDto ->
    val benefitList = categoryDto.benefitList.filter { cardDto ->
        cardDto.authType == HATCHBACK 
    }
    if (benefitList.isEmpty()) null else categoryDto.copy(benefitList = benefitList)
}

上面的代码是自己手写的,没有测试,可能会有一些错误。


推荐阅读