帮我优化以下代码:private static List<PxTopic> randomExamTopic(List<AbiIndicator> indicators, List<AbiIndicator> rootIndicators, int[][] randomTopicNum, List<PxTopic> topics) { List<PxTopic> res = new ArrayList<>(); for (AbiIndicator rootIndicator : rootIndicators) { List<AbiIndicator> secondIndicators = indicators.stream().filter(it -> rootIndicator.getId().equals(it.getParentId())).collect(Collectors.toList()); for (int i = 0; i < secondIndicators.size(); i++) { int[] topicNums = randomTopicNum[i]; for (int k = 0; k < topicNums.length; k++) { int topicNum = topicNums[k]; if (topicNum > 0) { List<PxTopic> randomTopics = getRandomTopics(topics, secondIndicators.get(i).getId(), k + 1, topicNum); res.addAll(randomTopics); } } } } return res; }
时间: 2023-11-27 14:53:38 浏览: 26
可以考虑以下优化:
1. 使用 foreach 循环代替 for 循环,因为 foreach 循环更加简洁易读。
2. 将第一个 for 循环和第二个 for 循环合并,减少循环嵌套。
3. 将获取随机题目的方法单独抽出来,使得代码更加模块化,易于维护。
改写后的代码示例如下:
```
private static List<PxTopic> randomExamTopic(List<AbiIndicator> indicators, List<AbiIndicator> rootIndicators, int[][] randomTopicNum, List<PxTopic> topics) {
List<PxTopic> res = new ArrayList<>();
for (AbiIndicator rootIndicator : rootIndicators) {
List<AbiIndicator> secondIndicators = indicators.stream().filter(it -> rootIndicator.getId().equals(it.getParentId())).collect(Collectors.toList());
for (AbiIndicator secondIndicator : secondIndicators) {
int[] topicNums = randomTopicNum[secondIndicators.indexOf(secondIndicator)];
for (int topicNum : topicNums) {
if (topicNum > 0) {
List<PxTopic> randomTopics = getRandomTopics(topics, secondIndicator.getId(), topicNums.indexOf(topicNum) + 1, topicNum);
res.addAll(randomTopics);
}
}
}
}
return res;
}
private static List<PxTopic> getRandomTopics(List<PxTopic> topics, String indicatorId, int level, int num) {
// TODO: 获取指定数量的随机题目
}
```