code: public static <T> Pair<List<T>, List<T>> partition(Iterator<T> values, Predicate<T> partitioner) {
          final Supplier<List<T>> supplier = Compositions.compose(new Vary<ArrayList<T>, List<T>>(), new ArrayListFactory<T>());
          return new PartitionBy<>(partitioner, supplier, supplier).apply(values);
      }
docs: Partitions elements from the iterator into two collections containing
  elements that match the predicate (left side collection) and elements
  that don't (right side collection). E.g:
  <code>partition([1,2,3,4], isOdd) -> ([1,3],[2,4])</code>
  
  @param <T> the element type
  @param values the values to be partitioned
  @param partitioner the predicate used to partition values
  @return the two partitioned collections in a pair.