问题:我想过滤列表中的列表。我所有的数据模型都是不可变的。
我的 JSON 结构如下所示
{
"root": [
{
"id": 2,
"val": 1231.12,
"fruit": [
{
"id": 2,
"name": "apple"
}
]
},
{
"id": 3,
"val": 1231.12,
"fruit": [
{
"id": 2,
"name": "apple"
},
{
"id": 3,
"name": "orange"
}
]
}
],
"fruits": [
{
"id": 1,
"name": "apple"
},
{
"id": 2,
"name": "guava"
},
{
"id": 3,
"name": "banana"
}
]
}
Run Code Online (Sandbox Code Playgroud)
问题陈述- 基本上,我想创建一个包含水果名称为苹果的所有根项目的列表。目前,我的天真解决方案看起来像这样。这涉及创建一个临时的可变列表,然后向其中添加特定项目。
下面的解决方案工作正常,但还有其他更好的方法来实现相同的目标。
val tempList = arrayListOf<RootItem>()
root?.forEach { item ->
item.fruit.filter {
// filter condition
it.id != null && it.name == "apple"
}
testList.add(item)
}
Run Code Online (Sandbox Code Playgroud)
Ren*_*ene 14
val result = root?.filter { item ->
item.fruits.any { it.id != null && it.name == "apple" }
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句:您的解决方案不起作用。该filter函数确实返回了一个您没有使用的新列表。并且您总是将项目添加到列表中,而不仅仅是在谓词返回 true 时。
| 归档时间: |
|
| 查看次数: |
3229 次 |
| 最近记录: |