Java中实现枚举与UUID列表的嵌套循环方法调用
实现枚举与UUID列表的嵌套遍历调用并收集结果
需求说明
遍历DaysOfWeekEnum的所有枚举值,对每个枚举值再遍历uuidList中的每个UUID,依次调用resolver.calculateForDay(day, uuid)方法,收集所有返回的Boolean结果,替换原代码中硬编码单个UUID的逻辑。
给定定义
枚举类型
public enum DaysOfWeekEnum { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }
UUID列表
List<String> uuidList = List.of( "c03b26e0-721e-3b57-9ffe-1b3709c4159e", "223bfb41-8d2b-3555-86ee-7aa9c73fe223", "d65e6239-d10d-3711-b76d-458290bcb76b", "854acaa6-3166-3542-8511-c46a21ce4a5b", "0a3e1588-ad59-3586-b071-d5001f5ff9a7", "e5524b9b-3aca-3b80-9aab-19bfec30fb9b", "1dbd3cd0-8382-3736-a9bd-f2cc78187dad", "63d29aeb-ab91-3d24-b40c-d69f2955a893", "a63ffce5-1d86-3afc-8b5a-97452f935632", "f62e1509-845b-3ac4-b85b-7648f675496d", "6ed7a21e-22a3-39a0-a83c-734e35625c67", "1edfbf51-36ff-34a6-9036-cfbd2ce8451e", "ac33181d-59bc-3b17-88fe-26fd10584bb6", "56e8e85d-e2e8-3419-8cfe-831acdbede84", "3f45f239-f137-3f7c-a45c-b0bf40b4de37", "b9aef79d-0397-320e-a393-db346b9496b4", "fd6ee25b-1768-3d81-8a22-f4410b0cce6f", "b349f0ea-c810-3790-bdc3-a82ed5921a28", "c4164cc5-1371-3ecb-a6d1-9f8d49531189" );
现有代码(存在硬编码问题)
@Autowired private final DaysResolver resolver; List<Boolean> collect = Stream.of(DaysOfWeekEnum.values()) .map(days -> resolver.calculateForDay(days, "c03b26e0-721e-3b57-9ffe-1b3709c4159e")) .collect(Collectors.toList());
解决方案
方式一:使用Stream API实现嵌套遍历
利用flatMap将每个枚举值转换为对应所有UUID的调用流,最终合并所有结果:
@Autowired private final DaysResolver resolver; List<Boolean> collect = Stream.of(DaysOfWeekEnum.values()) .flatMap(day -> uuidList.stream() .map(uuid -> resolver.calculateForDay(day, uuid))) .collect(Collectors.toList());
方式二:传统嵌套循环实现
如果更习惯命令式编程,用嵌套循环遍历并收集结果:
@Autowired private final DaysResolver resolver; List<Boolean> collect = new ArrayList<>(); for (DaysOfWeekEnum day : DaysOfWeekEnum.values()) { for (String uuid : uuidList) { collect.add(resolver.calculateForDay(day, uuid)); } }
两种方式都会按照Monday对应所有UUID、Tuesday对应所有UUID……的顺序执行调用,并收集所有返回的Boolean结果。
内容的提问来源于stack exchange,提问作者Romillion
相关产品推荐
相关产品推荐

