You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何过滤Options列表,保留tags含指定gender的元素?

Kotlin 筛选包含指定Gender标签的Options列表

问题描述

需要从Options列表中筛选出tags包含指定gender(示例值为"MALE")的对象列表。现有Kotlin代码及尝试过的无效写法如下:

val gender = "MALE"
val options: List<Options> = listOf(
    Options(id=1, tags = listOf("MALE", "JASMIN", "GIR")),
    Options(id=2, tags = listOf("MALE", "JASMIN", "GIR")),
    Options(id=3, tags = listOf("MALE", "JASMIN", "GIR")),
    Options(id=4, tags = listOf("MALE", "JASMIN", "GIR")),
    Options(id=5, tags = listOf("FEMALE", "JASMIN", "GIR")),
    Options(id=6, tags = listOf("FEMALE", "JASMIN", "GIR")),
    Options(id=7, tags = listOf("FEMALE", "JASMIN", "GIR")),
    Options(id=8, tags = listOf("FEMALE", "JASMIN", "GIR")),
)

// 尝试过的无效写法
options?.map{ itOptions -> itOptions.tags.filter{ it -> it == gender } }
options?.forEach{ itOptions -> itOptions.tags.filter{ it -> it == gender } }
options?.iterator()?.forEach { itOptions -> itOptions.tags.filter{ it -> it == gender } }

上述写法未实现预期过滤效果,期望结果为仅保留tags包含"MALE"的前4个Options对象:

val filteredOptions: List<Options> = listOf(
    Options(id=1, tags = listOf("MALE", "JASMIN", "GIR")),
    Options(id=2, tags = listOf("MALE", "JASMIN", "GIR")),
    Options(id=3, tags = listOf("MALE", "JASMIN", "GIR")),
    Options(id=4, tags = listOf("MALE", "JASMIN", "GIR"))
)

正确实现方式

之前的写法存在逻辑偏差:

  • map用于转换列表元素,会把每个Options对象转换成过滤后的tags子列表,而非保留原Options对象
  • forEach仅遍历执行操作,不会生成新列表,对原列表无影响

正确做法是使用Kotlin集合的filter函数,直接筛选符合条件的Options对象:

val gender = "MALE"
val options: List<Options> = listOf(
    Options(id=1, tags = listOf("MALE", "JASMIN", "GIR")),
    Options(id=2, tags = listOf("MALE", "JASMIN", "GIR")),
    Options(id=3, tags = listOf("MALE", "JASMIN", "GIR")),
    Options(id=4, tags = listOf("MALE", "JASMIN", "GIR")),
    Options(id=5, tags = listOf("FEMALE", "JASMIN", "GIR")),
    Options(id=6, tags = listOf("FEMALE", "JASMIN", "GIR")),
    Options(id=7, tags = listOf("FEMALE", "JASMIN", "GIR")),
    Options(id=8, tags = listOf("FEMALE", "JASMIN", "GIR")),
)

// 筛选出tags包含指定gender的Options对象
val filteredOptions = options.filter { it.tags.contains(gender) }

代码说明

  • filter函数遍历列表,仅保留满足it.tags.contains(gender)条件的元素
  • it.tags.contains(gender)用于判断当前Options的tags列表是否包含目标gender值
  • 最终filteredOptions即为所需的仅包含指定gender标签的Options列表

内容的提问来源于stack exchange,提问作者FlipNovid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:35:19