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

Kotlin中如何基于双字段过滤列表数据?编译报错如何解决?

问题解决方法

错误原因

  • filter lambda语法错误:单个filter的判断逻辑只需要声明一次元素参数,你拆分了两个参数s和t属于语法错误,同一个元素的两个字段判断直接用同一个参数引用即可
  • 可空类型未处理:GraphData里的beginningTime是Long?可空类型,直接做大小比较需要先处理空值,避免空指针风险

修改后的代码

override fun onGraphDataLoaded(data: List<GraphData>?) {
    Log.d("DATAITEM", data?.size.toString())
    // 只需要一个参数引用当前元素,同时处理beginningTime空值,空的情况下默认不满足>0的条件
    var childList: List<GraphData>? = data?.filter { s -> s.isChild && (s.beginningTime ?: 0) > 0 }
    var parentList: List<GraphData>? = data?.filter { s -> !s.isChild }
    Log.d("DATAITEM", "ChildSize"+childList?.size)
    Log.d("DATAITEM", "ParentSize"+parentList?.size)
}

代码说明

  • 去掉了多余的let嵌套,data?后可以直接调用filter方法,无需额外包裹let
  • 用同一个参数s引用当前遍历的GraphData对象,同时判断两个字段的条件
  • 用?: Elvis运算符处理beginningTime为空的情况,空值时返回0,自然不满足>0的条件,符合筛选逻辑;如果更倾向于显式判空,也可以把条件写成s.isChild && s.beginningTime != null && s.beginningTime > 0,效果完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:15:01