From 12c91d0c9fc8b9e400aae47058ae41d92602f6eb Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 25 Oct 2015 21:18:38 +0000 Subject: Throw IOException rather than wrapping in RuntimeException --- .../java/org/zwobble/couscous/util/ExtraLists.java | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/main/java/org/zwobble/couscous/util') diff --git a/src/main/java/org/zwobble/couscous/util/ExtraLists.java b/src/main/java/org/zwobble/couscous/util/ExtraLists.java index b3c017f..36c9b06 100644 --- a/src/main/java/org/zwobble/couscous/util/ExtraLists.java +++ b/src/main/java/org/zwobble/couscous/util/ExtraLists.java @@ -3,8 +3,44 @@ package org.zwobble.couscous.util; import java.util.List; import java.util.function.BiFunction; import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class ExtraLists { + @SuppressWarnings("unchecked") + public static List map( + Stream stream, + CheckedFunction function) throws E { + try { + return stream + .map(value -> { + try { + return function.apply(value); + } catch (Exception exception) { + throw new StashedException(exception); + } + }) + .collect(Collectors.toList()); + } catch (StashedException exception) { + throw (E)exception.exception; + } + } + + @FunctionalInterface + public static interface CheckedFunction { + R apply(T value) throws E; + } + + private static class StashedException extends RuntimeException { + private static final long serialVersionUID = 1L; + + private Exception exception; + + private StashedException(Exception exception) { + this.exception = exception; + } + } + public static R foldLeft( List list, Function initialValue, -- cgit v1.2.3