如何简化以下代码并使其更快?
这是二维数据结构的比较。几个文件夹,每个文件夹包含文件,与其他文件夹进行比较。
ArrayList<FolderGroup> userFolders = CommonFunctions.getUserFolders();
if (!userFolders.isEmpty()) {
for (FolderGroup userFoldersGroup : userFolders) {
for (FolderGroup publicFoldersGroup : publicGroupsList) {
if (userFoldersGroup.getName().equals(publicFoldersGroup.getName())) {
for (File publicFile : publicFoldersGroup.getFiles()) {
for (File userFile : userFoldersGroup.getFiles()) {
if (publicFile.contains(userFile)) {
publicFile.setIsDownloaded(true);
userFoldersGroup.setDownloadedCount();
}
}
}
}
}
}
}
答案 0 :(得分:0)
最多userFolders
是徒劳的,因为无论如何,当foreach (GetBillForCAResponse eBillResponse in eBillResponseList)
{
var statementDetailsResponse = GetStatementDetails(
new GetStatementDetailsRequest
{
BatchId = eBillResponse.BatchId,
CustomerAccountId = eBillResponse.CA.ToString("000000000"),
StatementId = eBillResponse.CAS_NUM.ToString("0000")
});
string xmlBill = statementDetailsResponse.StatementAsXML.ToString();
var document = new XmlDocument();
document.LoadXml(xmlBill);
****var saDetailedPageNode = XmlBillParser.GetDetailPageSectionBySA(requestSA, xmlBill);// This is the method of type XmlNodeList
if (saDetailedPageNode == null) continue;
var customerBill = new CustomerBill();
customerBill.IsSurepay = XmlBillParser.GetSurepayFlagFromBill(document);
customerBill.ServiceAddress = XmlBillParser.GetServiceAddress(requestSA, document);
customerBill.MonthName = XmlBillParser.GetBillStatementDate(requestSA, xmlBill);
customerBill.EqCurPlanBal = XmlBillParser.GetEqualizerCurrentPlanBalance(document);
customerBill.EqPymntDue = XmlBillParser.GetEqualizerPaymentDue(document);
****customerBill.Service = GetServiceAccountUsageAndBillingDetail(requestSA, xmlBill, saDetailedPageNode);// This is where the invalid argument is because saDetailedPageNode should be of type XmlNode
response.Add(customerBill);
}
为空时,最外面的循环将立即终止而不会迭代。
除此之外,我不认为整体复杂性可以降低。但是,您可以通过提取具有有意义名称的方法来使代码更容易理解。
为了获得更高的速度,您可以做的是使用允许您使用更少嵌套循环的数据结构。例如,如果您可以按文件夹组名称查询其他文件夹组集合,则只需迭代其中一个文件夹组集合。标准库附带了一些允许此类查询的集合类,并实现了the Map
interface(Documentation)。