code: public StringWrapperIterator prepare(StringWrapperIterator it) 
  	{
  		List multiWrappers = asMultiStringWrapperList(it);
  		if (multiWrappers.size()==0) return new BasicStringWrapperIterator( Collections.EMPTY_SET.iterator() );
  		MultiStringWrapper prototype = (MultiStringWrapper)multiWrappers.get(0);
  		for (int i=0; i<prototype.size(); i++) {
  			int j = prototype.getDistanceLearnerIndex(i);
  			StringDistanceLearner learner = innerLearners[j];
  			StringWrapperIterator prepped = learner.prepare( new JthStringWrapperValueIterator( j, multiWrappers.iterator() ) );
  			for (int k=0; k<multiWrappers.size(); k++) {
  				MultiStringWrapper msw = (MultiStringWrapper)multiWrappers.get(k);
  				StringWrapper w = prepped.nextStringWrapper();
  				msw.set( i, w );
  			}
  		}
  		return new BasicStringWrapperIterator( multiWrappers.iterator() );
  	}
docs: Prepare data for the sublearners.