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

基于通话类型与方向的Excel填充:数据结构选型咨询

适配通话统计数据存储与Excel导出的替代数据结构建议

需求回顾

需要存储基于通话方向(仅incoming/outgoing)和通话类型(仅national/international/others)维度的通话平均值,最终要按二维表头格式填充至Excel。当前使用Map<SummaryObject, Integer>存储,寻求更适配的方案。


推荐替代方案

1. 嵌套Map结构(最贴合二维Excel表头)

使用Map<String, Map<String, Integer>>,外层Key对应通话方向,内层Key对应通话类型,Value为平均值。

  • 优势:直接映射二维表头结构,Excel填充时可直接遍历外层Key作为行/列标识,内层Key作为对应维度的表头,逻辑直观无需额外转换。
  • 代码示例:
// 初始化存储结构
Map<String, Map<String, Integer>> callStats = new HashMap<>();

// 存入数据(Incoming, National:50)
callStats.computeIfAbsent("incoming", k -> new HashMap<>())
         .put("national", 50);

// 读取数据
Integer avg = callStats.get("incoming").get("national");

2. 自定义实体类+List集合(高可读性与扩展性)

创建包含完整维度和数值的实体类,用List存储所有统计项。

  • 优势:可读性强,后续扩展字段(如统计时间、样本量)只需修改实体类;支持排序、过滤等集合操作,适合数据量不大且需灵活处理的场景。
  • 代码示例:
@Data
class CallStatItem {
    private String direction;
    private String callType;
    private Integer average;
}

// 初始化并添加数据
List<CallStatItem> statList = new ArrayList<>();
statList.add(new CallStatItem("incoming", "national", 50));

Excel填充时可按direction分组,再匹配callType填充对应单元格。

3. 枚举+二维数组(高性能场景首选)

利用固定的方向/类型定义枚举,结合二维数组存储数值,数组下标对应枚举的顺序。

  • 优势:读写性能最优,适合数据量较大的场景;枚举可约束输入的合法性,避免无效值。
  • 代码示例:
// 定义枚举约束合法值
enum CallDirection { INCOMING, OUTGOING }
enum CallType { NATIONAL, INTERNATIONAL, OTHERS }

// 初始化二维数组(行=方向,列=类型)
Integer[][] statArray = new Integer[CallDirection.values().length][CallType.values().length];

// 存入数据(Incoming, National:50)
statArray[CallDirection.INCOMING.ordinal()][CallType.NATIONAL.ordinal()] = 50;

// 读取数据
Integer avg = statArray[CallDirection.INCOMING.ordinal()][CallType.NATIONAL.ordinal()];

原方案的局限性

原Map<SummaryObject, Integer>需确保SummaryObject的equals()和hashCode()逻辑正确(注:代码中@EqualsOgnoreCase应为@EqualsAndHashCode),且Excel填充时需遍历所有Entry再分组转换,效率和直观性不如上述方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:15:54