Я создал библиотеку разбора, которая принимает предоставленный ввод и возвращает поток записей. Затем программа вызывает эту библиотеку и обрабатывает результаты. В моем случае, моя программа использует что-то вродеКак создать возвращенный поток, который может использовать skip
recordStream.forEach(r -> insertIntoDB(r));
Один из типов ввода, которые могут быть предоставлены в библиотеке синтаксического анализа является плоский файл, который может иметь строку заголовка. Таким образом, библиотека синтаксического анализа может быть настроена так, чтобы пропускать строку заголовка. Если строка заголовка сконфигурирована, она добавляет элемент перехода (n) к возврату, например.
Files.lines(input)**.skip(1)**.parallel().map(r -> createRecord(r));
Библиотека синтаксического анализа возвращает результирующий поток.
Но, кажется, что пропуск, параллель и forEach не играют хорошо вместе. Конечный программист должен вместо этого запускать forEachOrdered, но это плохой дизайн, чтобы поставить это требование на программиста, чтобы они знали, что они должны использовать forEachOrdered при работе с типом ввода файла со строкой заголовка.
Как я могу принудительно выполнить заказное требование, когда это необходимо, в рамках построения возвращенной цепочки потоков, чтобы вернуть полностью функциональный поток писателю программы вместо потока со скрытыми ограничениями? Ответ на завершение потока в другом потоке?
Простейшее решение - требовать, чтобы JRE обновлялся, то есть '1,8u60' или новее ... – Holger