gpt4 book ai didi

java - 重构嵌套 for 循环

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:15:29 26 4
gpt4 key购买 nike

我有这种情况,两组数据之间存在父子关系。我有一个父文档集合和一个子文档集合。要求是 parent 和他们对应的 child 需要导出为'a'pdf文档。上述情况的简单实现如下(下面是java-ish伪代码):

for(Document parentDocument:Documents){
ExportToPdf(parentDocument);
for(Document childDocument:parentDocument.children()){
AppendToParentPdf(childDocument);
}
}

上面的内容可能会解决问题,但是突然间需求发生了变化,现在每个 parent 和他们相应的 child 都需要在单独的 pdf 中,因此通过更改 修改上面给出的片段AppendToParentPdf()ExportToPdf() 如下:

for(Document parentDocument:Documents){
ExportToPdf(parentDocument);
for(Document childDocument:parentDocument.children()){
ExportToPdf(childDocument);
}
}

这样一来,用不了多久,这个看似微不足道的代码片段就会出现一些严重的代码味道。

我对 SO 的问题是:

  1. 是否有更好的父子关系表示,例如上面的内容,而不是我以 O(n^2) 方式暴力破解所有文档及其子项,我可以使用不同的数据结构或技术以更优化的方式遍历整个结构。

  2. 在我上面描述的场景中,业务规则对于 pdf 的导出方式相当不稳定,是否有更智能的方式来编写导出函数的性质?导出格式也是 transient 的。 PDF 可以让位于 *.docs/csvs/xmls 等。

如果能对此有一些看法会很棒。

谢谢

最佳答案

Are there better representations of parent-child relationships such as the above where instead of brute-forcing my way through all the documents and their children in an O(n^2) fashion.

这不是O(N^2)。它是 O(N),其中 N 是父文档和子文档的总数。假设没有一个 child 有一个以上的父文档,那么你就不能显着提高性能。此外,与生成 PDF 的调用成本相比,遍历成本可能微不足道。

您可能需要考虑优化的唯一情况是子文档可以是多个父文档的子文档。在这种情况下,您可能希望跟踪您已经为...生成 PDF 的文档,如果您在遍历中重新访问它们,则跳过它们。可以使用 HashSet 来实现“我以前看过这个文档”的测试。

关于java - 重构嵌套 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8305779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com