【问题标题】:Kotlin - Search in nested listKotlin - 在嵌套列表中搜索
【发布时间】:2021-05-26 11:00:40
【问题描述】:

我的问题是关于算法的。

此响应是从后端发送的

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

        "title": "Volvo",

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

        "title": "Mercedes",
      
      }
]

categoryList -> 父列表 福利列表 -> 嵌套列表

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

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

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

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

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

如果我用数字表示,34 项正在返回。

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

【问题讨论】:

    标签: android kotlin filter


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-11-26
      • 2018-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多