Java лямбда, превращение текстового файла записей (например, CSV) в поток?

1

Я играю с ява-выражениями Java 8 в течение месяца, и я очень доволен всем, что он может сделать. Мне особенно нравится абстракция потоков, позволяющая более эффективно и с меньшим количеством элементов перебирать элементы элементов.

Теперь одна вещь, которую я пытаюсь выяснить, - абстрагировать текстовый файл или SQL-запрос записей в поток каких-то родов, но при этом позволяя ему буферизировать. Я уже пытаюсь реализовать интерфейс Stream и перегружен абстрактными методами.

Я вставлял свою работу в прогресс, но пока все упало, и мои исследования тоже приходят. Может ли кто-нибудь показать пример того, как превратить CSV с помощью BufferedReader в поток для каждой строки? Все, сохраняя буферизованный характер? Мне также хотелось бы поддержать параллель. Таким образом, для каждой буферизуемой записи она может быть передана параллельно ряду функций более высокого порядка.

Теги:
java-8
java-stream

2 ответа

1
Лучший ответ

Его легко преобразовать BufferedReader в поток для каждой строки, просто используйте метод BufferedReader.lines() сделанный именно для этой цели. Конечно, вы можете просто использовать Files.lines, полностью пропуская часть BufferedReader, если вам не нужен специально сконфигурированный CharSetDecoder.

Затем вы можете использовать map или flatMap для преобразования потока строк в поток записей или отдельных ячеек.

Как правило, это не очень хорошая идея реализовать весь интерфейс Stream вручную. Обычный способ создания пользовательского Stream - реализовать Spliterator и создать Stream используя метод StreamSupport.stream.

1

https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#lines-java.nio.file.Path-java.nio.charset.Charset-

Хотя все потоки поддерживают parallel() по крайней мере, в некоторой степени.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню