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

如何用Java Stream递归实现字符串列表的层级分组?

递归实现字符串列表的层级嵌套Map分组

完全可以用递归实现这种层级分组,核心思路是把每个字符串按.分割为路径数组,逐层递归处理每个路径节点,构建嵌套的Map结构。下面用Java代码给出具体实现:

核心实现代码

递归构建方法

private static void buildNestedMap(Map<String, Object> currentMap, String[] path, int index) {
    String key = path[index];
    // 处理叶子节点:当前是路径最后一段,直接存入Map
    if (index == path.length - 1) {
        currentMap.put(key, null); // 用null标记叶子,可根据需求替换为其他值
        return;
    }
    // 获取或创建当前key对应的子Map
    Map<String, Object> childMap = (Map<String, Object>) currentMap.getOrDefault(key, new HashMap<>());
    currentMap.put(key, childMap);
    // 递归处理下一层路径
    buildNestedMap(childMap, path, index + 1);
}

主调用与测试代码

import java.util.HashMap;
import java.util.Map;

public class NestedGrouping {
    public static void main(String[] args) {
        String[] list = {
            "caso.id",
            "caso.unidadeDoCaso.id",
            "caso.etiqueta",
            "caso.sigiloso",
            "caso.idPecaSegredoJustica",
            "caso.numeroAno",
            "caso.numero",
            "caso.competencia.id",
            "caso.competencia.ativo",
            "caso.competencia.nome",
            "caso.responsavel.id",
            "caso.responsavel.dadosPessoais.nome",
            "caso.escrivao.id",
            "caso.escrivao.dadosPessoais.nome"
        };

        Map<String, Object> rootMap = new HashMap<>();
        for (String s : list) {
            String[] path = s.split("\\.");
            buildNestedMap(rootMap, path, 0);
        }

        // 格式化打印结果
        printNestedMap(rootMap, 0);
    }

    // 辅助方法:格式化打印嵌套Map
    private static void printNestedMap(Map<String, Object> map, int indent) {
        String indentStr = "   ".repeat(indent);
        for (Map.Entry<String, Object> entry : map.entrySet()) {
            System.out.printf("%s%s->%n", indentStr, entry.getKey());
            Object value = entry.getValue();
            if (value instanceof Map) {
                printNestedMap((Map<String, Object>) value, indent + 1);
            } else {
                System.out.printf("%s   %s%n", indentStr, entry.getKey());
            }
        }
    }
}

代码说明

  1. 递归逻辑:每次处理路径数组的当前索引节点,若为最后一段则作为叶子存入;否则创建子Map并递归处理下一段路径,逐层嵌套。
  2. 叶子节点处理:示例中用null标记叶子,若需要存储具体值(如原路径段),可修改currentMap.put(key, null)为currentMap.put(key, key)或其他自定义值。
  3. 格式化打印:辅助方法通过缩进层级直观展示嵌套结构,与你期望的输出格式一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:31:07