From 2a182825a88b6ee957e205862f5cf3a505b3a173 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 9 Mar 2016 22:44:29 +0000 Subject: Initial implementation of generics for C# --- .../java/org/zwobble/couscous/util/ExtraLists.java | 29 +++++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) (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 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 List cons(T value, List list) { - return Stream.concat(Stream.of(value), list.stream()).collect(Collectors.toList()); + public static List cons(T value, Iterable list) { + return concat(list(value), list); } public static List append(List list, T value) { return Stream.concat(list.stream(), Stream.of(value)).collect(Collectors.toList()); } - public static List concat(List first, List second) { - return Stream.concat(first.stream(), second.stream()).collect(Collectors.toList()); + public static List concat(Iterable first, Iterable second) { + return ImmutableList.copyOf(Iterables.concat(first, second)); } public static List concat(List first, List second, List third) { @@ -82,6 +85,24 @@ public class ExtraLists { .collect(Collectors.toList()); } + public static List eagerMap( + Iterable iterable1, + Iterable iterable2, + BiFunction function) + { + // TODO: error handling when iterables are different lengths + Iterator iterator1 = iterable1.iterator(); + Iterator iterator2 = iterable2.iterator(); + + ImmutableList.Builder result = ImmutableList.builder(); + + while (iterator1.hasNext()) { + result.add(function.apply(iterator1.next(), iterator2.next())); + } + + return result.build(); + } + public static List eagerFlatMap( Iterable iterable, Function> function) { -- cgit v1.2.3