/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package pt.isel.mpd14.iters; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.function.Function; import java.util.function.Predicate; /** * * @author Miguel Gamboa at CCISEL */ class ListQueryable<T> implements Queryable<T> { final Iterable<T> src; public ListQueryable(Iterable<T> src) { this.src = src; } @Override public Queryable<T> filter(Predicate<T> p) { List<T> res = new LinkedList<>(); for (T elem : src) { if (p.test(elem)) { res.add(elem); } } return new ListQueryable(res); } @Override public <R> Queryable<R> map(Function<T, R> mapper) { List<R> res = new LinkedList<>(); for (T elem : src) { res.add(mapper.apply(elem)); } return new ListQueryable(res); } @Override public Queryable<T> skip(int n) { List<T> res = new LinkedList<>(); Iterator<T> i = src.iterator(); while(n > 0){ i.next(); n--;} while(i.hasNext()) res.add(i.next()); return new ListQueryable(res); } @Override public Iterator<T> iterator() { return src.iterator(); } }