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

如何将Kotlin的List<Result<T>>类型转换为Result<List<T>>?

如何将List<Result>转换为Result<List>(遇首个失败即终止)

核心思路是遍历列表逐个校验Result状态,一旦遇到失败结果就立即终止处理并返回该失败;若全部为成功结果,则将所有成功值收集后包装为成功结果返回。

Java 实现示例

首先定义简化的Result密封接口(适配常见的成功/失败模型):

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

sealed interface Result<T> permits Result.Success, Result.Failure {
    record Success<T>(T value) implements Result<T> {}
    record Failure<T>(Throwable error) implements Result<T> {}

    default boolean isSuccess() {
        return this instanceof Success;
    }

    default Optional<Throwable> getFailure() {
        return this instanceof Failure<?> f ? Optional.of(f.error()) : Optional.empty();
    }

    default Optional<T> getValue() {
        return this instanceof Success<T> s ? Optional.of(s.value()) : Optional.empty();
    }
}

转换方法实现:

public static Result<List<String>> convertToResultList(List<Result<String>> input) {
    List<String> successValues = new ArrayList<>();
    for (Result<String> result : input) {
        if (result.isSuccess()) {
            successValues.add(result.getValue().orElseThrow());
        } else {
            // 遇到第一个失败,直接返回该失败结果
            return new Result.Failure<>(result.getFailure().orElseThrow());
        }
    }
    // 全部成功,返回包装后的成功结果
    return new Result.Success<>(successValues);
}

Kotlin 实现示例

Kotlin的密封类语法更简洁,实现如下:

sealed class Result<out T> {
    data class Success<out T>(val value: T) : Result<T>()
    data class Failure(val error: Throwable) : Result<Nothing>()
}

fun List<Result<String>>.toResultList(): Result<List<String>> {
    val successList = mutableListOf<String>()
    for (result in this) {
        when (result) {
            is Result.Success -> successList.add(result.value)
            is Result.Failure -> return result // 首个失败直接返回,终止处理
        }
    }
    return Result.Success(successList)
}

关键逻辑说明

  • 遍历过程中短路处理失败:一旦发现Failure实例,立即终止遍历并返回该失败结果,避免不必要的后续处理
  • 成功结果的收集:仅当所有元素均为Success时,才将所有成功值汇总为List<String>,并包装为Result.Success返回

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:35:35