package org.qi4j.api.dataset.iterable;
import org.qi4j.api.dataset.DataSet;
import org.qi4j.api.dataset.Query;
import org.qi4j.functional.Function;
import org.qi4j.functional.Iterables;
import org.qi4j.functional.Specification;
/**
* TODO
*/
public class IterableDataSet<T>
implements DataSet<T>
{
private Iterable<T> iterable;
public IterableDataSet( Iterable<T> iterable )
{
this.iterable = iterable;
}
@Override
public DataSet<T> constrain( Specification<T> selection )
{
return new IterableDataSet<T>( Iterables.filter( selection, iterable ) );
}
@Override
public <U> DataSet<U> project( Function<T, U> conversion )
{
return new IterableDataSet<U>( Iterables.map( conversion, iterable ) );
}
@Override
public Query<T> newQuery()
{
return new IterableQuery<T>( iterable );
}
}