如何从给定数据类型列表中选取可兼容所有取值的最优数据类型
最优实现方案
核心思路
- 为每个内置数值类型预先定义可比较的优先级权重(权重和类型的容纳范围正相关,范围越大权重越高),无需维护复杂的兼容列表
- 遍历输入的类型列表,过滤出合法的数值类型,同时记录最大权重对应的类型
- 如果输入中存在非预设的数值类型,直接返回兜底的
string
代码实现
import java.util.HashMap; import java.util.List; import java.util.Map; public class DataTypeSelector { // 存储类型和对应权重,权重越高容纳范围越大 private static final Map<String, Integer> TYPE_WEIGHT = new HashMap<>(); static { TYPE_WEIGHT.put("byte", 1); TYPE_WEIGHT.put("short", 2); TYPE_WEIGHT.put("int", 3); TYPE_WEIGHT.put("long", 4); // 后续扩展类型直接在此添加配置即可,比如float、double等 } public String suitableDataType(List<String> input) { int maxWeight = 0; String resultType = "string"; for (String type : input) { // 遇到未预设的非数值类型直接返回兜底 if (!TYPE_WEIGHT.containsKey(type)) { return "string"; } int currentWeight = TYPE_WEIGHT.get(type); if (currentWeight > maxWeight) { maxWeight = currentWeight; resultType = type; } } return resultType; } }
方案优势
- 没有硬编码的if-else校验链,后续新增类型仅需在
TYPE_WEIGHT中新增一行配置,维护成本极低 - 时间复杂度为O(n),n为输入列表长度,相比原逐个优先级校验的方案效率更高
- 逻辑简单清晰,不会出现兼容列表配置错误导致的匹配异常问题
内容的提问来源于stack exchange,提问作者Suman
相关产品推荐
相关产品推荐

