条件数组列表?
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]
我有一个表达式数组列表和一个文件数组列表 我正在为这些文件做一个过滤器;过滤器也将是 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]