我有一个过滤csv文件的问题。在我的GUI用户中,根据我要删除csv文件的测试用例名称选择他的测试用例名称。例如,我从JTable case1和case2中选择并将它们存储在字符串列表[case1,case2]中,如何获得测试名称为case1和case2的唯一行。
我尝试读取csv文件并创建jtable和动作侦听器,将选择的测试用例存储为列表中的字符串并且它们有效。然而;过滤部分我真的不知道吗?
感谢您的帮助。
答案 0 :(得分:1)
如果我理解正确,您希望从某处获取测试用例的名称并将其存储在列表中,如下所示:
List<String> cases = Arrays.asList("case1", "case9");
然后,您想要阅读包含许多案例的文件,包括case1
和case9
,并且您只想选择这些行。如果正确,则假设您有以下文件:
case1, a, b, c, ...
case2, x, y, z, ...
case9, aa, b, cc, ..
case22, 1,2,3, ...
我会使用Java 8&#39; Stream
逐行读取文件,只选取包含cases
元素的文件行,如上所述。 Stream将逐行读取文件,选择一行,将其发送到另一个方法以检查该行是否包含cases
列表中的任何测试用例,如果是,则返回true并{{ 1}}将该行保存在Stream
列表中。如果该行不包含任何测试用例,则Stream会跳过该行。见下面的示例代码。
readCases
以上输入的输出为:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class ReadFileStream {
public static void main(String[] args) throws IOException {
//cases that you picked from table
List<String> cases = Arrays.asList("case1", "case9");
//open stream to file, please change directory and filename
Stream<String> lines = Files.lines(Paths.get("C:\\test_java", "filterfile.txt"));
//loop through stream line by line, pick up those that match
List<String> readCases = lines.filter(line -> containsAll(line, cases)).collect(Collectors.toList());
lines.close();
System.out.println(readCases);
}
//this is a simple method that performs String's contains() for each
//case in the list.
public static boolean containsAll(String line, List<String> cases) {
for (String s : cases) {
if (line.contains(s)) {
return true;
}
}
return false;
}
}