aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/util
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-10-25 21:18:38 +0000
committerMichael Williamson <mike@zwobble.org>2015-10-25 21:18:38 +0000
commit12c91d0c9fc8b9e400aae47058ae41d92602f6eb (patch)
treef1a387b264cb2a5cde658264037c8526b7b916d7 /src/main/java/org/zwobble/couscous/util
parentc935f5699b4a97a03171c3de9ae507ad67abc553 (diff)
Throw IOException rather than wrapping in RuntimeException
Diffstat (limited to 'src/main/java/org/zwobble/couscous/util')
-rw-r--r--src/main/java/org/zwobble/couscous/util/ExtraLists.java36
1 files changed, 36 insertions, 0 deletions
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 <T, R, E extends Exception> List<R> map(
+ Stream<T> stream,
+ CheckedFunction<T, R, E> 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<T, R, E extends Exception> {
+ 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 <T, R> R foldLeft(
List<T> list,
Function<T, R> initialValue,