System.out.println 不适用于提供的流?
System.out.println doesn't work on a supplied Stream?
我还是 Java 的新手,尤其是 Suppliers 的新手,但我不明白为什么我无法从以下代码中获得任何输出:
final BufferedReader brLines = new BufferedReader(new InputStreamReader(csvFile));
final Supplier<Stream<LinkedList<String>>> procLines = () -> brLines.lines().map(elm -> processCSV(elm));
lineCount = Math.toIntExact(procLines.get().count());
System.out.println(lineCount); // This prints the correct amount of lines to the console.
final CountDownLatch latch = new CountDownLatch(lineCount);
Stream<LinkedList<String>> listStream = procLines.get();
listStream.forEach((x) -> {
System.out.println(x); // Why is there no console output here?
outputText(() -> x); // Why is there no console output here either?
...
});
以下是本版块中提到的一些方法
public static LinkedList<String> processCSV(String line) {
LinkedList<String> elms = new LinkedList<String>();
char delimiter = ',';
char quote = '"';
String[] elmArray = splitCSVWithQuote(line, delimiter, quote).toArray(new String[0]);
for (String elm : elmArray) {
elms.add(elm);
}
return elms;
}
&
public static void outputText(Supplier sup) {
System.out.println(sup.get());
}
任何人都可以提供任何帮助吗?
lineCount = Math.toIntExact(procLines.get().count());
count()
是一个终端操作,它可能遍历流产生一个结果。终端操作完成后,stream pipeline被认为消耗掉了,不能再使用
所以你消耗了文件的所有行。因此,由于 BufferedReader
现在处于 end-of-stream,供应商无法再次为您提供流。这就是为什么没有输出。
我还是 Java 的新手,尤其是 Suppliers 的新手,但我不明白为什么我无法从以下代码中获得任何输出:
final BufferedReader brLines = new BufferedReader(new InputStreamReader(csvFile));
final Supplier<Stream<LinkedList<String>>> procLines = () -> brLines.lines().map(elm -> processCSV(elm));
lineCount = Math.toIntExact(procLines.get().count());
System.out.println(lineCount); // This prints the correct amount of lines to the console.
final CountDownLatch latch = new CountDownLatch(lineCount);
Stream<LinkedList<String>> listStream = procLines.get();
listStream.forEach((x) -> {
System.out.println(x); // Why is there no console output here?
outputText(() -> x); // Why is there no console output here either?
...
});
以下是本版块中提到的一些方法
public static LinkedList<String> processCSV(String line) {
LinkedList<String> elms = new LinkedList<String>();
char delimiter = ',';
char quote = '"';
String[] elmArray = splitCSVWithQuote(line, delimiter, quote).toArray(new String[0]);
for (String elm : elmArray) {
elms.add(elm);
}
return elms;
}
&
public static void outputText(Supplier sup) {
System.out.println(sup.get());
}
任何人都可以提供任何帮助吗?
lineCount = Math.toIntExact(procLines.get().count());
count()
是一个终端操作,它可能遍历流产生一个结果。终端操作完成后,stream pipeline被认为消耗掉了,不能再使用
所以你消耗了文件的所有行。因此,由于 BufferedReader
现在处于 end-of-stream,供应商无法再次为您提供流。这就是为什么没有输出。