From 7fbbbf62b303ee819017844ff8058b764465e246 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 2 Apr 2016 00:29:32 +0100 Subject: Defer generation overrides until necessary, don't mangle C# names --- .../org/zwobble/couscous/util/ExtraIterables.java | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'src/main/java/org/zwobble/couscous/util/ExtraIterables.java') diff --git a/src/main/java/org/zwobble/couscous/util/ExtraIterables.java b/src/main/java/org/zwobble/couscous/util/ExtraIterables.java index 1fd9fca..cd9b3df 100644 --- a/src/main/java/org/zwobble/couscous/util/ExtraIterables.java +++ b/src/main/java/org/zwobble/couscous/util/ExtraIterables.java @@ -1,7 +1,14 @@ package org.zwobble.couscous.util; +import com.google.common.collect.Iterables; + import java.util.Iterator; import java.util.function.BiFunction; +import java.util.function.Function; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +import static org.zwobble.couscous.util.ExtraLists.list; public class ExtraIterables { private ExtraIterables() {} @@ -69,4 +76,44 @@ public class ExtraIterables { } }; } + + public static Iterable lazyCons(T head, Iterable tails) { + return Iterables.concat(list(head), tails); + } + + public static Iterable lazyMap(Iterable iterable, Function function) { + return new Iterable() { + @Override + public Iterator iterator() { + return map(iterable.iterator(), function); + } + }; + } + + private static Iterator map(Iterator iterator, Function function) { + return new Iterator() { + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public R next() { + return function.apply(iterator.next()); + } + }; + } + + public static Iterable lazyFlatMap(Iterable iterable, Function> function) { + return new Iterable() { + @Override + public Iterator iterator() { + return stream(iterable).flatMap(element -> stream(function.apply(element))).iterator(); + } + }; + } + + public static Stream stream(Iterable iterable) { + return StreamSupport.stream(iterable.spliterator(), false); + } } -- cgit v1.2.3