Я хотел бы обернуть 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?