菜单递归调用

该博客介绍了如何使用Java实现菜单数据的递归遍历,通过创建对象模型`ItemCat`和`ItemCatResult`,以及在`ItemCatServiceImpl`服务中定义递归方法`getItemCatList`,查询并构建多级菜单。通过对数据库查询的结果进行遍历和条件判断,将父节点和子节点分别处理,最终形成包含层级信息的菜单列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.数据格式


2.对象模型


public class ItemCat {

//转换成json数据时使用u作为key

@JsonProperty("u")

private String url;

@JsonProperty("n")

private String name;

@JsonProperty("i")

private List<?> item;

}


public class ItemCatResult {

private List<?> data;

 

public List<?> getData() {

return data;

}

 

public void setData(List<?> data) {

this.data = data;

}

}


3.service逻辑处理

@Service

public class ItemCatServiceImpl implements ItemCatService {

 

@Autowired

private TbItemCatMapper itemCatMapper;

@Override

public ItemCatResult queryAllCategory() throws Exception {

ItemCatResult result = new ItemCatResult();

result.setData(getItemCatList(0l));

return result;

}

/**

 * 查询分类列表

 * <p>Title: getItemCatList</p>

 * <p>Description: </p>

 * @param parentid

 * @return

 */

private List<?> getItemCatList(long parentid) {

TbItemCatExample example = new TbItemCatExample();

Criteria criteria = example.createCriteria();

//查询parentid0的分类信息

criteria.andParentIdEqualTo(parentid);

List<TbItemCat> list = itemCatMapper.selectByExample(example);

List dataList = new ArrayList();

for (TbItemCat tbItemCat : list) {

//判断是否为父节点

if (tbItemCat.getIsParent()) {

ItemCat itemCat = new ItemCat();

itemCat.setUrl("/category/" + tbItemCat.getId() + ".html");

itemCat.setName(tbItemCat.getName());

//递归调用

itemCat.setItem(getItemCatList(tbItemCat.getId()));

//添加到列表

dataList.add(itemCat);

} else {

String catItem = "/item/" + tbItemCat.getId() + ".html|" + tbItemCat.getName();

dataList.add(catItem);

}

}

return dataList;

}

 

}

注:代码可能对大家帮助不大,因为毕竟数据库设计的不一样,但查询思路差别不大。
<think>好的,用户想知道如何在Python中使用列表的insert方法。首先,我需要回忆insert方法的基本用法。记得insert方法需要两个参数:索引位置和要插入的元素。比如,list.insert(index, element)。这时候应该先给出一个简单的例子,说明如何调用这个方法。 接下来,用户可能需要知道插入的位置具体是怎么确定的。比如,如果索引是0,元素会被插入到列表的最前面;如果索引是负数或者超过列表长度,会发生什么?这时候需要解释索引的处理方式,比如负数索引是从末尾开始计数,超过长度的话元素会被添加到末尾。 然后,考虑到用户可能对列表的其他操作也感兴趣,可以提到append和extend方法作为对比,帮助用户区分不同方法的使用场景。比如,append只能在末尾添加,而insert可以在任意位置插入。 用户提供的引用中提到了insert方法的两个输入参数,这也需要整合到回答里,确保引用正确。例如,引用[1]中的例子展示了在列表开头插入"Pineapple",这可以作为示例代码的一部分。 另外,可能用户在实际使用中会遇到问题,比如插入多个元素或者处理嵌套列表的情况。这时候可以建议使用循环或者列表切片来处理,但需要保持回答简洁,避免信息过载。 还需要检查是否有其他相关的注意事项,比如insert方法的时间复杂度。因为列表是基于数组实现的,插入到中间位置会导致后续元素移动,时间复杂度是O(n),这可能对性能有影响。不过用户的问题主要集中在用法上,可能不需要深入讨论性能,但如果有相关问题的话可以提及。 最后,生成相关问题时要考虑用户可能接下来会问的内容,比如如何删除元素、其他列表操作方法或者性能比较。结合引用中提到的pop方法(引用[1])和join方法(引用[2]),可以设计相关问题,引导用户进一步学习。</think>在Python中,使用列表的`insert()`方法可以精准控制元素插入位置。该方法接收两个参数:目标索引和待插入元素,语法为`list.insert(index, element)`。索引为0时插入列表头部,索引超过列表长度时元素将添加至末尾[^1]。 ### 操作示例 初始列表: ```python fruits = ["Apple", "Banana", "Cherry"] ``` 1. **头部插入**: ```python fruits.insert(0, "Mango") # 结果:["Mango", "Apple", "Banana", "Cherry"] ``` 2. **中间插入**: ```python fruits.insert(2, "Orange") # 结果:["Mango", "Apple", "Orange", "Banana", "Cherry"] ``` 3. **尾部追加**: ```python fruits.insert(len(fruits), "Peach") # 等效于 fruits.append("Peach") ``` ### 技术特性 - 支持负数索引(从末尾倒数) - 时间复杂度为$O(n)$(因需要移动后续元素) - 可插入任意数据类型(包括其他列表/字典) ### 对比其他方法 | 方法 | 功能 | 时间复杂度 | |------------|--------------------|------------| | append() | 尾部添加单个元素 | $O(1)$ | | extend() | 尾部合并可迭代对象 | $O(k)$ | | insert() | 指定位置插入 | $O(n)$ |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值