条件数组列表?

Arraylist of Conditions?

我有一个表达式数组列表和一个文件数组列表 我正在为这些文件做一个过滤器;过滤器也将是 Arraylist ->

假设我有一个包含 4 个文件 [文件、文件、文件、文件] 文本文件的数组列表 我有这 3 个表达式/条件:

[X,O,Z]

为了将文件之一移动到过滤器数组列表中,必须在文件中验证 3 个条件

ArrayList<String> XpathExpression= new ArrayList<String>();
ArrayList<File> FilterdFiles= new ArrayList<File>();
File folder = new File("Path for many files");
        File[] files = folder.listFiles();
        for (File file : files) {
            
            if(file.isFile() && file.getName().endsWith(".txt")) {
                
                //Parser here

                /*******Get attribute values******/
                
                for(String xpathExp: XpathExpression) {

                    if(what I have to write in the if statment to check that the three conditions are valid for the current file so i can add it to the FilterdFiles.) {
                        
                        FilterdFiles.add(file);
                    
                        }
                    
                    else
                        
                    continue;
                        } 

我必须在 if 语句中写什么来检查这三个条件对当前文件是否有效,以便我可以将它添加到 FilterdFiles。

如果所有条件都必须匹配,您可以像这样编写另一个验证方法:

private boolean validate(File file, ArrayList<String> XpathExpression){
   for(String xpathExp: XpathExpression){
       boolean validateResult = validate file with xpathExp;
       if(validateResult != true){
           return false;
       }
   }
   return true;
}

如果 validate(file, XpathExpression) return 为真,则将文件添加到过滤器数组列表。 或者验证是否有任何 xpathExp 匹配:

private boolean validate(File file, ArrayList<String> XpathExpression){
   for(String xpathExp: XpathExpression){
       boolean validateResult = validate file with xpathExp;
       if(validateResult == true){
           return true;
       }
   }
   return false;
}

我不能根据你的代码给你一个解决方案,因为它没有包含足够的信息。但我可以给你一个例子,应该可以帮助你解决问题。

下面的代码将从包含另一个数组中所有字符串的列表中添加字符串。我使用匹配的标志来跟踪匹配项。

import java.util.*;

public class Main{
    public static void main(String[] args) {
        String[] files = {"cat and dog", "dog", "fish dog cat", "apple", "peach"};
        String[] expressions = {"dog", "cat"};
        ArrayList<String> filtered = new ArrayList<>();
        
        for(String f: files){
            boolean matched = true;
            for(String e: expressions){
                if (!f.contains(e)) { 
                    matched = false;
                    break;
                }
            }
            if (matched)  filtered.add(f);
        }
        
        System.out.println(filtered);
    }
}

输出:

[cat and dog, fish dog cat]