通过steam流来完成
package com.ktjy.test.stream;
import com.ktjy.pojo.AppCategory;
import com.ktjy.service.AppCategoryService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 使用Stream API处理应用分类的示例类
*/
public class Main1 {
/**
* 使用Stream API对应用分类列表进行处理,筛选出父分类ID为0的分类,并为其添加子分类
*
* @param list 输入的应用分类列表
* @return 处理后的应用分类列表,包含父分类及其子分类
*/
public static List<AppCategory> doStream(List<AppCategory> list) {
// 筛选父分类(parentId为0的分类),并为每个父分类添加子分类
List<AppCategory> collect1 = list.stream()
.filter(item -> item.getParentId() != null && item.getParentId() == 0)
.map(
AppCategory -> {
onChildRenStream(list, AppCategory);
return AppCategory;
})
.collect(Collectors.toList());
return collect1;
}
/**
* 为指定的父分类添加子分类
*
* @param list 应用分类列表
* @param parentCategory 父分类
*/
private static void onChildRenStream(List<AppCategory> list, AppCategory parentCategory) {
// 根据父分类的ID筛选子分类,并将子分类添加到父分类的children列表中
list.stream().filter(item -> item.getParentId() == parentCategory.getId())
.map(category -> {
onChildRenStream(list, category);
parentCategory.getChildren().add(category);
return category;
}).collect(Collectors.toList());
}
/**
* 程序入口
*
* @param args 命令行参数
*/
public static void main(String[] args) {
// 初始化Spring上下文
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 从Spring上下文中获取AppCategoryService bean
AppCategoryService appCategoryService = (AppCategoryService) context.getBean("appCategoryServiceImpl");
// 调用AppCategoryService的selectAll方法获取所有应用分类
List<AppCategory> appCategories = appCategoryService.selectAll();
// 使用Stream API处理应用分类
List<AppCategory> appCategories1 = doStream(appCategories);
// 打印处理后的应用分类及其子分类
System.out.println("===================================");
for (AppCategory appCategory1 : appCategories1) {
System.out.println(appCategory1.getCategoryName());
for (AppCategory appCategory2 : appCategory1.getChildren()) {
System.out.println("\t" + appCategory2.getCategoryName());
for (AppCategory appCategory : appCategory2.getChildren()) {
System.out.println("\t\t" + appCategory.getCategoryName());
}
}
}
}
}