aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/util
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-03-09 22:44:29 +0000
committerMichael Williamson <mike@zwobble.org>2016-03-10 16:43:05 +0000
commit2a182825a88b6ee957e205862f5cf3a505b3a173 (patch)
tree2054c8a0c4252bd4b3f161de0b34482158ee7728 /src/main/java/org/zwobble/couscous/util
parent20dc1e124d606cf4298d5112b6d3c4f6c74e9b68 (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.java29
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) {