android - 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
如果我说数字,则返回3和4项。
有人可以帮助我吗?我只想在没有3的情况下达到4项?
解决方案
请注意,您无法通过简单的过滤等方式解决此问题,因为实际上您需要创建一个全新的categoryDto
对象(或修改现有对象)。你没有categoryDto
with 4
,但3
在你的原始数据结构中没有,所以你需要创建它。
根据创建 dto 的方式,它可能类似于:
categoryList.mapNotNull { categoryDto ->
val benefitList = categoryDto.benefitList.filter { cardDto ->
cardDto.authType == HATCHBACK
}
if (benefitList.isEmpty()) null else categoryDto.copy(benefitList = benefitList)
}
上面的代码是自己手写的,没有测试,可能会有一些错误。
推荐阅读
- git - 为什么 git 拒绝大块头?
- c++ - 编译时未实现的 QColor 错误(C++)
- c# - C#使用默认应用程序打开pdf文件并在应用程序关闭后删除文件
- usb - Zigbee 嗅探器可在家中渗透测试 Zigbee 网络
- python-3.x - 使用 KDTree/KNN 返回最近的邻居
- macos - 无法在 macOS 10.12 上运行 Qt 5.12.2
- node.js - URL中运算符之间的区别
- ios - 使用 iFunbox > 用户文件系统在 iOS 13.3 上删除空相册
- c++ - 为什么编译器会报告“operator<< and operator>> recursive on all control paths will cause stack overflow”?
- c++ - 具有不同返回类型的函数变体