diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-07-15 14:23:47 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-07-15 14:23:47 +0100 |
| commit | bc06840e00425db342bc5a021c0900d9e63b71f0 (patch) | |
| tree | 0aa45a4ea475804a36a5ee33f9a726656f45bc1f /src/main/java/org/zwobble/couscous/util | |
| parent | 3be68289f34a37ac7f9e1e95fa0d95dfc1bb3836 (diff) | |
Split switch handling off to desugar step
Diffstat (limited to 'src/main/java/org/zwobble/couscous/util')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/util/ExtraIterables.java | 39 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/util/ExtraLists.java | 4 |
2 files changed, 43 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/util/ExtraIterables.java b/src/main/java/org/zwobble/couscous/util/ExtraIterables.java index 1140462..3881d29 100644 --- a/src/main/java/org/zwobble/couscous/util/ExtraIterables.java +++ b/src/main/java/org/zwobble/couscous/util/ExtraIterables.java @@ -2,8 +2,11 @@ package org.zwobble.couscous.util; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; +import com.google.common.collect.Iterators; +import com.google.common.collect.PeekingIterator; import java.util.Iterator; +import java.util.NoSuchElementException; import java.util.Optional; import java.util.function.BiFunction; import java.util.function.Function; @@ -162,4 +165,40 @@ public class ExtraIterables { public static <T> Iterable<T> of(T e1, T e2, T e3) { return ImmutableList.of(e1, e2, e3); } + + public static <T> Iterable<T> iterable(Optional<T> optional) { + if (optional.isPresent()) { + return of(optional.get()); + } else { + return empty(); + } + } + + public static <T> Iterable<T> takeUntil(Iterable<T> iterable, Predicate<T> predicate) { + return new Iterable<T>() { + @Override + public Iterator<T> iterator() { + return takeUntil(iterable.iterator(), predicate); + } + }; + } + + public static <T> Iterator<T> takeUntil(Iterator<T> iterator, Predicate<T> predicate) { + PeekingIterator<T> peekingIterator = Iterators.peekingIterator(iterator); + return new Iterator<T>() { + @Override + public boolean hasNext() { + return peekingIterator.hasNext() && !predicate.test(peekingIterator.peek()); + } + + @Override + public T next() { + if (hasNext()) { + return peekingIterator.next(); + } else { + throw new NoSuchElementException(); + } + } + }; + } } diff --git a/src/main/java/org/zwobble/couscous/util/ExtraLists.java b/src/main/java/org/zwobble/couscous/util/ExtraLists.java index 76d3de7..d52c099 100644 --- a/src/main/java/org/zwobble/couscous/util/ExtraLists.java +++ b/src/main/java/org/zwobble/couscous/util/ExtraLists.java @@ -143,4 +143,8 @@ public class ExtraLists { this.exception = exception; } } + + public static <T> List<T> copyOf(Iterable<T> iterable) { + return ImmutableList.copyOf(iterable); + } } |
