package org.zwobble.mammoth.internal.util; import com.google.common.collect.Iterables; import java.util.Iterator; import java.util.Optional; import java.util.function.Function; import java.util.function.Predicate; public class MammothIterables { public static Optional tryGetLast(Iterable iterable) { return Optional.ofNullable(Iterables.getLast(iterable, null)); } public static Optional tryFind(Iterable iterable, Predicate predicate) { for (T element : iterable) { if (predicate.test(element)) { return Optional.of(element); } } return Optional.empty(); } public static Iterable lazyMap(Iterable iterable, Function function) { return new Iterable() { @Override public Iterator iterator() { return map(iterable.iterator(), function); } }; } public static T getFirst(Iterable iterable, T defaultValue) { Iterator iterator = iterable.iterator(); if (iterator.hasNext()) { return iterator.next(); } else { return defaultValue; } } 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()); } }; } }