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

Kotlin中是否存在针对可空值的map函数?需实现非空映射空值返回null

实现可空值的映射操作

核心需求很明确:给一个可空值,有值时就用指定函数转换它,没值(null/None)时直接返回null。下面是几种主流语言的实现方案,都是轻量的工具方法,不用依赖额外框架:

Java 实现

可以封装一个静态工具方法,结合Java 8+的Function接口:

import java.util.function.Function;

public class NullableUtils {
    public static <T, R> R mapNullable(T nullableValue, Function<T, R> mapper) {
        return nullableValue != null ? mapper.apply(nullableValue) : null;
    }
}

用法示例:

// 非空值:执行映射
String input = "hello";
String upperCaseResult = NullableUtils.mapNullable(input, String::toUpperCase); // 返回"HELLO"

// 空值:直接返回null
input = null;
String nullResult = NullableUtils.mapNullable(input, String::toUpperCase); // 返回null

C# 实现

用扩展方法更贴合C#的语法习惯,支持引用类型和可空值类型:

public static class NullableExtensions
{
    public static R? MapNullable<T, R>(this T? nullableValue, Func<T, R> mapper) 
        where T : class
    {
        return nullableValue != null ? mapper(nullableValue) : default(R?);
    }

    // 针对可空值类型的重载
    public static R? MapNullable<T, R>(this T? nullableValue, Func<T, R> mapper) 
        where T : struct
    {
        return nullableValue.HasValue ? mapper(nullableValue.Value) : default(R?);
    }
}

用法示例:

// 引用类型
string? input = "world";
int? lengthResult = input.MapNullable(s => s.Length); // 返回5

input = null;
lengthResult = input.MapNullable(s => s.Length); // 返回null

// 可空值类型
int? nullableInt = 10;
int? doubledResult = nullableInt.MapNullable(i => i * 2); // 返回20

nullableInt = null;
doubledResult = nullableInt.MapNullable(i => i * 2); // 返回null

Python 实现

Python里用None表示空值,写个极简的工具函数就行:

def map_nullable(nullable_value, mapper):
    return mapper(nullable_value) if nullable_value is not None else None

用法示例:

# 非空值执行映射
input_str = "python"
title_result = map_nullable(input_str, lambda s: s.title()) # 返回"Python"

# 空值返回None
input_str = None
title_result = map_nullable(input_str, lambda s: s.title()) # 返回None

本质上所有实现都是同一个逻辑:先判空,非空则应用转换函数,空则直接返回空。这种封装能减少重复的判空代码,让业务逻辑更清晰。

内容的提问来源于stack exchange,提问作者Damian Rafael Lattenero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:01:14