code: public static <T> Iterable<T> filter( Iterable<T> list, Filter<T>... filters )
      {
          if ( Arrays.isEmpty( filters ) ) {
              List<T> copy = new ArrayList<T>();
              for ( T each : list ) {
                  copy.add( each );
              }
              return copy;
          }
          return filterToList( list, filters );
      }
docs: Filter an {@link Iterable} using {@link Filter}s and return a new {@link Iterable}.
  
  {@link Filter}s are applied in given order on each element from source collection.<br/>
  The returned collection contain all the source elements accepted by at least one {@link Filter}.