code: public <O> CursorList<O> transform(Function<? super J, ? extends O> function, Predicate<? super O> predicate) {
  		Collection<O> result = null;
  		if (function != null) {
  			result = Lists.transform(this.data, function);
  		} else {
  			result = (List) this.data;
  		}
  		if (predicate != null) {
  			result = Collections2.filter(result, predicate);
  		}
  		
  		// copy the source data, since "live" collections are incompatible with paged results.
  		ArrayList<O> dataCopy = Lists.newArrayList(result);
  		CursorList<O> copy = new CursorList<O>(dataCopy, this.cursor);
  		return copy;
  	}
docs: Transform this {@link CursorList} instance by applying the transformation function to each data list item.
  Notice that the cursor instance will not be modified, so it will be usable only in the context of the original query.
  @param <O> the type of the resulting {@link CursorList}, after applying the transformation
  @param function the function to apply to each data item. May be null.
  @param predicate the {@link Predicate} to filter returned data. Not-matching entities will not be returned. May be null.
  @return a new {@link CursorList} instance. The original instance is not modified.