我有一段读取文件的代码。文件的内容只是每行的一个 id。没什么特别的。但是,我不确定为什么此代码的每种样式都会产生不同的结果。
文件内容如下
a9c536f6-592f-4458-b61b-6ed3f875e990
d6b384d3-8fae-2dd3-ed06-b57cb65b093c
31474dd6-5c3b-4dc4-82cb-7e05121a77e1
b37dd457-da49-4972-9e3d-cd642e975562
f88df909-35bc-453c-b706-d48b5a11af9a
5d75083b-c4a8-4ad1-8494-645aaabfb283
85d8170e-8982-43c2-b574-9d7fe96d1b46
68bf33d0-1b5e-480c-83f2-ae38d9e0c8c8
26ea9d4a-f509-43b2-850f-cc445dccfd33
f9e9bd88-f67d-4e66-b281-eceeb57985eb
@Test
void testReadFile() throws Exception
{
String fileName = "/Users/user/Downloads/payload";
// #1
BufferedReader reader = new BufferedReader(new FileReader(fileName));
Set<String> readUsingCollect = reader.lines().filter(l -> !l.isEmpty()).collect(Collectors.toSet());
reader = new BufferedReader(new FileReader(fileName));
String row;
// #2
Set<String> readUsingNonEmpty = new HashSet<>();
while ((row = reader.readLine()) != null && !row.isEmpty()) {
readUsingNonEmpty.add(row);
}
reader = new BufferedReader(new FileReader(fileName));
// #3
String row1;
Set<String> readNonCheckingNonEmpty = new HashSet<>();
int counter = 0;
while ((row1 = reader.readLine()) != null) {
if (row1.isEmpty()) {
counter += 1;
}
readNonCheckingNonEmpty.add(row1);
}
Sets.SetView<String> difference = Sets.difference(readNonCheckingNonEmpty, readUsingNonEmpty);
System.out.println("Size readUsingCollect: " + readUsingCollect.size());
System.out.println("Size readUsingNonEmpty: " + readUsingNonEmpty.size());
System.out.println("Size readNonCheckingNonEmpty: " + readNonCheckingNonEmpty.size());
System.out.println("Counter: " + counter);
System.out.println("Difference in size: " + difference.size());
reader.close();
}
这是运行上述代码的结果
Size readUsingCollect: 7525
Size readUsingNonEmpty: 5498
Size readNonCheckingNonEmpty: 7526
Counter: 2
Difference in size: 2028
我想知道为什么#2 产生的结果与#3 和#1 不同。文件内容没有空行。最让我困惑的是我希望 #1 和 #2 是相同的,但它们是不同的。