我有一个相当复杂的方法需要实现。因此,请耐心等待我尝试以尽可能简单的方式来描述它。
我得到了一组代表文件名的字符串——比如“abc”、“def”和“ghi”。我必须从这些名称中为每个名称派生一组“关联”文件名 - 比如说“abc_123”、“abc_456”和“abc_789”代表“abc”;“def”的“def_123”、“def_456”和“def_789”;和“ghi”的“ghi_123”、“ghi_456”和“ghi_789”。我能做的就这么多了。但是,这些关联的文件名可能附加了前缀或后缀,这些前缀或后缀是不可预测的字符串 - 因此“abc”的关联文件名实际上可能是“HELLOabc_123WORLD”、“FOOabc_456BAR”和“999abc_789000”。(就正则表达式而言,它' 只需在我上面写的相关文件名的两边都放一个 *)。简而言之,相关的文件名将如下所示:
*<original filename><other piece that I know>*
其中星星表示任意数量的随机字符(可以是 0)。
这是第一块拼图。
接下来,我得到了另一组字符串 C,我将与一组关联文件名(组 B)进行比较。(如果您想知道,我正在尝试检查相关文件是否在某个目录中,并且我有该目录中的文件名列表,设置为 C)。如果我在集合 C 中找到某个文件的所有关联文件名,我可以继续从集合 A 中检查该文件。我必须检查集合 A 中的每个文件名,并且如果集合 B 中的所有关联文件名都是在集合 C 中找到,我可以从集合 A 中检查该文件。
最后,我必须返回未选中的集合 A 中的文件名(因此,如果找到所有内容,我将不返回任何内容)。
我一直在努力想出一种方法来实现这种方法。我想创建一个 Map ,它将文件名从集合 A 映射到包含与该文件名关联的所有文件名的 List ,如下所示:
Key Value
abc *abc_123*, *abc_456*, *abc_789*
def *def_123*, *def_456*, *def_789*
ghi *ghi_123*, *ghi_456*, *ghi_789*
然后我可以遍历这个映射的元素和元素的值,将它们与集合 C 中的字符串进行比较。如果在集合 C 中找到给定键的值(列表)的所有元素,我可以标记那把钥匙从我的名单上删除。任何剩余的密钥都将被退回。
在我看来,这应该可行,但是将其放入代码中的实际机制对我来说非常具有挑战性。因此,如果您能给我任何小建议或指示,让我的思路朝着正确的方向发展,我将不胜感激。如果您想提供代码,我的实现语言将是 Java。伪代码也受到欢迎。