diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-03-09 22:44:29 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-03-10 16:43:05 +0000 |
| commit | 2a182825a88b6ee957e205862f5cf3a505b3a173 (patch) | |
| tree | 2054c8a0c4252bd4b3f161de0b34482158ee7728 /src/main/java/org/zwobble/couscous/util | |
| parent | 20dc1e124d606cf4298d5112b6d3c4f6c74e9b68 (diff) | |
Initial implementation of generics for C#
Diffstat (limited to 'src/main/java/org/zwobble/couscous/util')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/util/ExtraLists.java | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/src/main/java/org/zwobble/couscous/util/ExtraLists.java b/src/main/java/org/zwobble/couscous/util/ExtraLists.java index ce9230a..8485b02 100644 --- a/src/main/java/org/zwobble/couscous/util/ExtraLists.java +++ b/src/main/java/org/zwobble/couscous/util/ExtraLists.java @@ -1,8 +1,11 @@ package org.zwobble.couscous.util; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; +import java.util.Iterator; import java.util.List; +import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.Predicate; import java.util.stream.Collectors; @@ -26,16 +29,16 @@ public class ExtraLists { return ImmutableList.of(value1, value2, value3); } - public static <T> List<T> cons(T value, List<T> list) { - return Stream.concat(Stream.of(value), list.stream()).collect(Collectors.toList()); + public static <T> List<T> cons(T value, Iterable<T> list) { + return concat(list(value), list); } public static <T> List<T> append(List<T> list, T value) { return Stream.concat(list.stream(), Stream.of(value)).collect(Collectors.toList()); } - public static <T> List<T> concat(List<? extends T> first, List<? extends T> second) { - return Stream.concat(first.stream(), second.stream()).collect(Collectors.toList()); + public static <T> List<T> concat(Iterable<? extends T> first, Iterable<? extends T> second) { + return ImmutableList.copyOf(Iterables.concat(first, second)); } public static <T> List<T> concat(List<? extends T> first, List<? extends T> second, List<? extends T> third) { @@ -82,6 +85,24 @@ public class ExtraLists { .collect(Collectors.toList()); } + public static <T1, T2, R> List<R> eagerMap( + Iterable<T1> iterable1, + Iterable<T2> iterable2, + BiFunction<T1, T2, R> function) + { + // TODO: error handling when iterables are different lengths + Iterator<T1> iterator1 = iterable1.iterator(); + Iterator<T2> iterator2 = iterable2.iterator(); + + ImmutableList.Builder<R> result = ImmutableList.builder(); + + while (iterator1.hasNext()) { + result.add(function.apply(iterator1.next(), iterator2.next())); + } + + return result.build(); + } + public static <T, R> List<R> eagerFlatMap( Iterable<T> iterable, Function<T, Iterable<R>> function) { |
