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

Java函数式按字符串长度分组方法转递归实现的问题排查

问题原因
  • 递归分支重复执行:原代码中每处理完一个元素的ii+1递归返回后,都会额外触发一次i+1的递归调用,导致外层列表的同一个子列表会被遍历多次,元素被重复插入Map的对应列表中。
  • 冗余参数逻辑错误:传递的临时列表ls完全没有必要作为递归参数,Map中已经存储了各个字符串长度对应的列表实例,直接从Map读取操作即可,原逻辑中多余的列表参数也增加了逻辑混乱的概率。
修复后的代码
public static Map<Integer,List<String>> recursiva(List<List<String>> listas){
    return recursivaAux(listas, 0, 0, new HashMap<>());
}

private static Map<Integer,List<String>> recursivaAux(List<List<String>> listas, int i, int ii, Map<Integer,List<String>> res){
    // 终止条件:所有外层列表遍历完成
    if (i >= listas.size()) {
        return res;
    }
    List<String> currentSubList = listas.get(i);
    // 当前子列表遍历完成,递归处理下一个外层元素
    if (ii >= currentSubList.size()) {
        return recursivaAux(listas, i + 1, 0, res);
    }
    // 处理当前元素
    String word = currentSubList.get(ii);
    int length = word.length();
    // 不存在对应长度的列表就新建,否则直接追加
    res.computeIfAbsent(length, k -> new ArrayList<>()).add(word);
    // 递归处理当前子列表的下一个元素
    return recursivaAux(listas, i, ii + 1, res);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:27:02