有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个有趣的两难选择:

我有一门课,比方说叫FileCabinet

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

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

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

文件柜1

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

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

文件柜1

  • 文件1
    • 文件3\u重复
  • 文件2
    • 文件3\u重复2
    • 文件4_重复
  • 文件3
    • 文件1\u重复
    • 文件2\u重复
  • 文件4
    • 文件2_重复2

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

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


共 (1) 个答案

  1. # 1 楼答案

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

    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);
       }
    }
    

    当您从主映射中获取文件时,只需将与之相关的文件从主映射列表中替换为与之相关的文件即可

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