java查询所有子级组装成Cascader数据
时间: 2023-06-01 07:03:17 浏览: 152
假设我们有一个实体类 `Category`,它有以下属性:
```java
public class Category {
private Long id;
private String name;
private Long parentId;
}
```
其中 `parentId` 表示当前分类的父级分类 id,如果为 0 则表示根分类。
现在我们需要查询所有子级分类,并将它们组装成 Cascader 数据格式。Cascader 是一个层级选择器,可以用于选择多级分类,格式如下:
```json
[
{
"value": "1",
"label": "分类1",
"children": [
{
"value": "2",
"label": "分类1-1"
},
{
"value": "3",
"label": "分类1-2"
}
]
},
{
"value": "4",
"label": "分类2",
"children": [
{
"value": "5",
"label": "分类2-1"
}
]
}
]
```
Java 代码实现如下:
```java
public class CategoryService {
// 根据父级分类 id 查询所有子级分类
public List<Category> findChildren(Long parentId) {
// 省略查询代码
}
// 将分类列表组装成 Cascader 数据
public List<Map<String, Object>> assembleCascaderData(List<Category> categories) {
List<Map<String, Object>> result = new ArrayList<>();
for (Category category : categories) {
Map<String, Object> item = new HashMap<>();
item.put("value", category.getId().toString());
item.put("label", category.getName());
List<Category> children = findChildren(category.getId());
if (children != null && children.size() > 0) {
item.put("children", assembleCascaderData(children));
}
result.add(item);
}
return result;
}
// 查询所有分类,并将它们组装成 Cascader 数据
public List<Map<String, Object>> findAllCategories() {
List<Category> rootCategories = findChildren(0L);
return assembleCascaderData(rootCategories);
}
}
```
首先,我们定义了一个 `findChildren` 方法,用于查询指定父级分类的所有子级分类。然后,我们定义了一个 `assembleCascaderData` 方法,用于将分类列表组装成 Cascader 数据。
`assembleCascaderData` 方法首先遍历分类列表,将每个分类转换成一个 Map 对象,其中包含 `value` 和 `label` 属性。然后,它递归调用 `findChildren` 方法,将当前分类的子级分类组装成 `children` 属性,最后将当前分类的 Map 对象添加到结果列表中。
最后,我们定义了一个 `findAllCategories` 方法,用于查询所有分类,并将它们组装成 Cascader 数据。它首先调用 `findChildren` 方法,查询根分类的所有子级分类,然后调用 `assembleCascaderData` 方法,将分类列表组装成 Cascader 数据。
阅读全文