映射除非异常

Saa*_*ooq 3 kotlin

我有一个Strings 列表,表示我想要map的对象列表中的序列化数据.我使用以下代码:

strings.map { gson.fromJson(it, Model::class.java) }
// .doOtherStuff
Run Code Online (Sandbox Code Playgroud)

但是,有时会出现解析错误并且流停止,我希望能够恢复列表直到失败.例如,如果错误发生在第7项,我想doOtherStuff获得成功处理的6个项目.

最常用的方法是什么?我可以过滤列表以查看解析是否会成功,但是执行两次这是一项昂贵的操作.

Jay*_*ard 10

您可以将异常视为null然后过滤空值.

val models = modelsInJson.mapNotNull { json ->
    try {
        gson.fromJson(json, Model::class.java) 
    } catch (ex: WhateverException) {
        // TODO: logging here?
        null
    }
}
Run Code Online (Sandbox Code Playgroud)

WhateverException对于要处理的错误类型,请更换正确的错误,其他错误仍然可以停止处理.

  • 您可以使用`mapNotNull`而不是`map`和`filterNotNull`来将复杂度从2N降低到N. (4认同)