当前位置: 首页 > 知识库问答 >
问题:

Java:在嵌套列表中匹配列表

黄博艺
2023-03-14

我有一个有趣的两难处境:

我有一门课,假设它叫做文件柜。

FileCabinet存储文件的链接列表,称为“filesInCabinet”。

在每个文件中,还有另一个文件链接列表,称为“relatedFiles”。

所以它看起来像这样,例如:

文件柜1

  • 文件1
    • 文件3
    • 文件3
    • 文件1
    • 文件2
    • 文件2

    我遇到的问题是,嵌套列表(“relatedFiles”)包含文件的单独实例,因此实际上更像:

    文件柜1

    • 文件1
      • File3_duplicate
      • 文件3\u重复2
      • File1_duplicate
      • File2_duplicate
      • 文件2\u重复2

      这样,当我在其中一个嵌套列表中更改文件的属性时,我希望它也更改真实文件的属性,但它只更改副本的属性。

      是否有一种有效的方法可以将嵌套列表中的文件与非嵌套文件列表“匹配”?每个文件还包含唯一的字符串、整数等,因此很容易确定副本是克隆的文件。

共有1个答案

隆选
2023-03-14

有一种非常快速的方法可以做到这一点,将所有文件放在一个集中,然后再次构建相关文件。这样地:

Map<File, File> existingFiles = new Map<File, File>();
for (File f : filesInCabinet) {
   existingFiles.put(f, f);
}

for (File f : filesInCabinet) {
   List<File> relatedFiles = f.getRelatedFiles();
   for (int i = 0; i < relatedFiles.size(); i++) {
      File relatedFile = existingFiles.get(relatedFiles.get(i));
      relatedFiles.set(i, relatedFile);
   }
}

它的工作原理只是将文件放入映射中,并将相关列表上的文件替换为由于equals/hashcode实现而从Map中获得的文件,因此当您提供相关对象时,您可以从主列表(filesIn内阁)中获取实例。

这意味着需要在文件上实现hashCode和equals。

 类似资料:
  • 问题内容: 谁能告诉我如何在嵌套列表中调用索引? 通常我只写: 但是如果我有一个带有嵌套列表的列表,如下所示: 我想分别浏览每个索引? 问题答案: 如果您确实需要索引,则可以按照内部列表再次执行以下操作: 但是遍历列表本身是更pythonic的: 如果您确实需要索引,也可以使用:

  • 本文向大家介绍Markdown 嵌套列表,包括了Markdown 嵌套列表的使用技巧和注意事项,需要的朋友参考一下 示例 列表可以嵌套 八个空间 十二个空格 四个空间 然后回来

  • 问题内容: 试图了解如何在Firebase中实现嵌套列表。 可以解决的问题:1-to-N消息传递系统,对于每个消息,您希望维护一个已接收和阅读该消息的用户列表。 阅读了“ Firebase中阵列的最佳实践”。尝试避免使用数组,因为我要同时进行写操作,而在这里看来它们并不是一个好选择。 当前试图通过在每个消息下存储子树来实现此目的,每个子树是已接收,读取或以其他方式对消息 Y 执行某些操作 X 的用

  • 问题内容: 我想复制一个2D列表,以便如果我修改一个列表,则不修改另一个列表。 对于一维列表,我只是这样做: 现在,如果我修改了b,a就不会修改。 但这不适用于二维列表: 如果我修改了b,a也会被修改。 我该如何解决? 问题答案: 对于不管尺寸多少都可以工作的更通用的解决方案,请使用:

  • 我正在创建一个具有嵌套列表的API。Jackson似乎是一个创建对象的好工具,但我不太清楚如何嵌套列表,我想知道这是否可能。 我的对象看起来像这样。 我希望有一种方法可以将其映射到json,看起来像: 我们希望能够做到这一点,以便我们可以将属性添加到列表中。

  • 目前我有这个阵列= 条件: 如果每个嵌套数组index2都相同,那么我想用[0.0 1.0,1.0 2.0,2.0 3.0,3.0 4.0] = [1.0,3.0,5.0,7.0]来求和 我想要的最终结果:[[“efg”, [1.0, 3.0, 5.0, 7.0], “测试”]] 有什么方法或建议来获得这个结果吗?