public Query<T> reverse()
	{
		if(this._source instanceof ArrayIterable<?>)
		{
			ArrayReverseIterable rs = new ArrayReverseIterable(((ArrayIterable<T>)this._source).getSource());
			return new Query<T>(rs);
		}
		else if ((this._source instanceof List<?>) && (this._source instanceof RandomAccess))
		{
			return new Query<T>( new ReverseIterable((List<T>)this._source));
		}
		else
		{
			ArrayList<T> rs = new ArrayList<T>();
			for(T element : this._source)
			{
				rs.add(element);
			}
			return new Query<T>(rs);
		}
	}