
com.googlecode.functionalcollections.FunctionalIterables Maven / Gradle / Ivy
package com.googlecode.functionalcollections;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Set;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
public abstract class FunctionalIterables {
public static FunctionalIterable make(Iterable iterable) {
return new StandardFunctionalIterable(iterable);
}
public static FunctionalIterable make(F... elements) {
return new StandardFunctionalIterable(Lists.newArrayList(elements));
}
public static FunctionalIterable create() {
return make(new ArrayList());
}
private static final class StandardFunctionalIterable implements FunctionalIterable {
private Iterable iterable;
public StandardFunctionalIterable(Iterable iterable) {
this.iterable = iterable;
}
public boolean all(Predicate super F> predicate) {
return Iterables.all(iterable, predicate);
}
public boolean any(Predicate super F> predicate) {
return Iterables.any(iterable, predicate);
}
public FunctionalIterable each(Block super F> block) {
Iterator extends F> iterator = iterable.iterator();
while (iterator.hasNext()) {
block.apply(iterator.next());
}
return this;
}
public FunctionalIterable filter(Predicate super F> predicate) {
return make(Iterables.filter(iterable, predicate));
}
public FunctionalIterable select(Predicate super F> predicate) {
return filter(predicate);
}
public F find(Predicate super F> predicate) {
return Iterables.find(iterable, predicate);
}
public F detect(Predicate super F> predicate) {
Iterator iterator = filter(predicate).iterator();
return iterator.hasNext() ? iterator.next() : null;
}
public FunctionalIterable transform(Function super F, ? extends T> function) {
return make(Iterables.transform(iterable, function));
}
public FunctionalIterable map(Function super F, ? extends T> function) {
return transform(function);
}
public Iterator iterator() {
return iterable.iterator();
}
public M inject(M initial, Injector injector) {
M memo = initial;
for (F each : iterable) {
memo = injector.apply(memo, each);
}
return memo;
}
public boolean contains(Object element) {
return Iterables.contains(iterable, element);
}
public FunctionalIterable concat(Iterable extends F> target) {
this.iterable = Iterables.concat(iterable, target);
return this;
}
public FunctionalIterable concat(F... target) {
return concat(Lists.newArrayList(target));
}
public FunctionalIterable cycle() {
return make(Iterables.cycle(iterable));
}
public boolean elementsEqual(Iterable> target) {
return Iterables.elementsEqual(iterable, target);
}
public int frequency(Object element) {
return Iterables.frequency(iterable, element);
}
public F get(int position) {
return Iterables.get(iterable, position);
}
public F getLast() {
return Iterables.getLast(iterable);
}
public F getOnlyElement() {
return Iterables.getOnlyElement(iterable);
}
public F getOnlyElement(F defaultValue) {
return Iterables.getOnlyElement(iterable, defaultValue);
}
public boolean isEmpty() {
return Iterables.isEmpty(iterable);
}
public FunctionalIterable> paddedPartition(int size) {
return make(Iterables.paddedPartition(iterable, size));
}
public FunctionalIterable> partition(int size) {
return make(Iterables.partition(iterable, size));
}
public boolean removeAll(Collection> elementsToRemove) {
return Iterables.removeAll(iterable, elementsToRemove);
}
public boolean retainAll(Collection> elementsToRetain) {
return Iterables.retainAll(iterable, elementsToRetain);
}
public int size() {
return Iterables.size(iterable);
}
public F[] toArray(Class type) {
return Iterables.toArray(iterable, type);
}
public Collection toCollection() {
if (Collection.class.isInstance(iterable)) {
return (Collection) iterable;
}
return Lists.newArrayList(iterable);
}
public List toList() {
if (List.class.isInstance(iterable)) {
return (List) iterable;
}
return Lists.newArrayList(iterable);
}
public Set toSet() {
if (Set.class.isInstance(iterable)) {
return (Set) iterable;
}
return Sets.newLinkedHashSet(iterable);
}
public FunctionalIterable uniq() {
return make(Sets.newLinkedHashSet(iterable));
}
public FunctionalIterable reverse() {
return make(Iterables.reverse(Lists.newArrayList(iterable)));
}
public Iterator messagedIterator(final String messageOnLast) {
final Iterator iterator = iterable.iterator();
return new Iterator() {
public boolean hasNext() {
return iterator.hasNext();
}
public F next() {
if (!hasNext()) {
throw new NoSuchElementException(messageOnLast);
}
return iterator.next();
}
public void remove() {
iterator.remove();
}
};
}
@Override
public String toString() {
return Iterables.toString(iterable);
}
// public FunctionalIterable flatten() {
// // TODO Auto-generated method stub
// throw new UnsupportedOperationException("not yet implement.");
// }
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy