Программисты JAVA общаются здесь
Anonymous
Второй вызов метода «get» поставщика пуст.
Сообщение
Anonymous » 25 дек 2024, 14:30
Для приведенного ниже кода, если я сделаю второй вызов поставщику с помощью метода get, счетчик будет равен нулю.
Код: Выделить всё
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Scanner;
import java.util.function.Supplier;
import java.util.stream.Stream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class FileOperations {
private Logger logger = LoggerFactory.getLogger(getClass());
public static void main(String[] args) {
FileOperations fOps = new FileOperations();
fOps.usingBufferedReader();
}
public void usingBufferedReader() {
Path path = Path.of("app_log.log");
/**
* Only first operation with stream provide results.
*/
try (BufferedReader reader = Files.newBufferedReader(path);) {
Supplier streamSupplier = () -> reader.lines();
streamSupplier.get().forEach(ln -> {
System.out.println(ln); // Prints all lines properly
});
long count = streamSupplier.get().count();
System.out.println("count = " + count); // Outputs "0"
} catch (IOException e) {
logger.error("IOException: %s%n", e);
}
}
}
Я попробовал считать первым вызовомstreamSupplier.get.
Код: Выделить всё
long count = streamSupplier.get().count();
System.out.println("count = " + count); // Outputs "0"
В то время он правильно напечатал число 528,
но не напечатал строки файла .
Я использую Java 17
Подробнее здесь:
https://stackoverflow.com/questions/793 ... r-is-empty
1735126259
Anonymous
Для приведенного ниже кода, если я сделаю второй вызов поставщику с помощью метода get, счетчик будет равен нулю. [code]import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.Scanner; import java.util.function.Supplier; import java.util.stream.Stream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class FileOperations { private Logger logger = LoggerFactory.getLogger(getClass()); public static void main(String[] args) { FileOperations fOps = new FileOperations(); fOps.usingBufferedReader(); } public void usingBufferedReader() { Path path = Path.of("app_log.log"); /** * Only first operation with stream provide results. */ try (BufferedReader reader = Files.newBufferedReader(path);) { Supplier streamSupplier = () -> reader.lines(); streamSupplier.get().forEach(ln -> { System.out.println(ln); // Prints all lines properly }); long count = streamSupplier.get().count(); System.out.println("count = " + count); // Outputs "0" } catch (IOException e) { logger.error("IOException: %s%n", e); } } } [/code] Я попробовал считать первым вызовомstreamSupplier.get. [code]long count = streamSupplier.get().count(); System.out.println("count = " + count); // Outputs "0" [/code] В то время он правильно напечатал число 528, [b]но не напечатал строки файла[/b]. Я использую Java 17 Подробнее здесь: [url]https://stackoverflow.com/questions/79307077/second-call-to-get-method-of-supplier-is-empty[/url]