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

如何将Java对象中驼峰格式的值转换为蛇形格式且保留原有结构

错误原因说明

  1. 第一个方案无效果是因为Java中String是不可变类,CaseFormat.LOWER_CAMEL.to()会返回新的字符串对象,你仅对遍历出的字符串做了转换,但没有把转换后的结果写回原列表,原有列表的元素不会发生变化。
  2. 第二个方案结构错误是因为你使用了flatMap操作,该操作会把所有内层List的元素全部打散合并到同一个外层List中,自然就把双层嵌套结构压平为单层了。

正确实现方案

这里提供两种可靠实现,均会完全保留原有双层嵌套结构:

方案1:直接修改原有列表

如果你不需要保留原始数据,直接修改原列表即可:

Map<String, Object> myLayout = (Map<String, Object>) data.getMyLayout();
List<List<String>> titles = (List<List<String>>) myLayout.get("titles");

titles.forEach(titleList -> {
    for (int i = 0; i < titleList.size(); i++) {
        String convertedStr = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, titleList.get(i));
        titleList.set(i, convertedStr);
    }
});

方案2:Stream生成新列表替换

写法更简洁,生成新的双层列表替换原有值:

Map<String, Object> myLayout = (Map<String, Object>) data.getMyLayout();
List<List<String>> titles = (List<List<String>>) myLayout.get("titles");

List<List<String>> updatedTitles = titles.stream()
        .map(titleList -> titleList.stream()
                .map(title -> CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, title))
                .collect(Collectors.toList())
        )
        .collect(Collectors.toList());

myLayout.put("titles", updatedTitles);

以上两种方案执行后,输出的结构和值都会符合你的预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:39:03