aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/util
diff options
context:
space:
mode:
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,