Я хотел бы обернуть java.util.streams.Stream
вокруг InputStream
для обработки одного байта или одного символа за раз. Я не нашел простого способа сделать это.
Рассмотрим следующее упражнение: мы хотим подсчитать количество раз, когда каждая буква появляется в текстовом файле. Мы можем сохранить это в массиве, чтобы tally[0]
сохранил количество раз, которое появляется в файле, tally[1]
хранит количество времени b и т.д. Поскольку я не мог найти способ потоковой передачи файла напрямую, я сделал это:
int[] tally = new int[26];
Stream<String> lines = Files.lines(Path.get(aFile)).map(s -> s.toLowerCase());
Consumer<String> charCount = new Consumer<String>() {
public void accept(String t) {
for(int i=0; i<t.length(); i++)
if(Character.isLetter(t.charAt(i) )
tall[t.charAt(i) - 'a' ]++;
}
};
lines.forEach(charCount);
Есть ли способ выполнить это без использования метода lines
? Могу ли я просто обрабатывать каждый символ напрямую как поток или поток вместо создания строк для каждой строки в текстовом файле.
Могу ли я более конкретно преобразовать java.io.InputStream
в java.util.Stream.stream
?