Comments 7
Примеры использования:
List<Document> documents = filesModel.getFiles().values().stream()
.map(rethrowFunction(DocumentFactory::newFileDocument))
.collect(toList());
return uncheck(() -> MessageDigest.getInstance("MD5"));
Rethrow-методы удобны, когда необходимо явно ловить исключение за пределами Stream-цепочки. Uncheck же необходимы для случаев, когда мы точно знаем, что исключение в данном месте невозможно и нет смысл его перехватывать
Это бред. Никогда не кидайте checked-исключение там, где оно не объявлено. Иначе оно улетит туда, где его никто не будет ждать. Это может быть удобно в трёхстрочных программах, но в серьёзном проекте вы потом не обрадуетесь, когда логи будете читать и баг-репорты разгребать.
Ну-ну.
Function<File, Document> fn = rethrowFunction(DocumentFactory::newFileDocument);
List<Document> documents = filesModel.getFiles().values().stream()
.map(fn)
.collect(toList());
Компилятор заставит бесполезно обернуть в try-catch присваивание, но не заставит обернуть стрим-цепочку. И не говорите мне не делать так. Выносить функции в переменные — нормальный стиль программирования на джаве. Прятать проверяемые исключения — это злоупотребление костылём в системе типов.
У вашего подхода одна существенная проблема: таким образом нельзя сделать ленивые стримы. А Stream API лениво по спецификации. Фактически все действия выполняет терминальная операция (например, collect), а вовсе не промежуточная типа map. Поэтому именно терминальная и будет кидать ваше исключение. Причём если стрим параллельный, оно может быть транслировано из другого потока.
Generic исключения в лямбда-функциях