code: package org.applause.lang.validation;
  
  import java.util.Iterator;
  
  import com.google.common.base.Predicate;
  import com.google.common.collect.Iterables;
  
  /**
   * Taken from http://codemonkeyism.com/creating-a-fluent-interface-for-google-collections/
   */
  public class FluentIterable<T> implements Iterable<T> {
  	private Iterable<T> iterable;
  
  	public FluentIterable(Iterable<T> iterable) {
  		this.iterable = iterable;
  	}
  
  	public static <T> FluentIterable<T> with(Iterable<T> iterable) {
  		return new FluentIterable<T>(iterable);
  	}
  
  	public FluentIterable<T> filter(Predicate<? super T> predicate) {
  		return new FluentIterable<T>(Iterables.filter(this.iterable, predicate));
  	}
  
  	public Iterator<T> iterator() {
  		return this.iterable.iterator();
  	}
  
  	public boolean exactlyOnce() {
  		return Iterables.size(this) == 1;
  	}
  	
  }
  