public <R> DeltaIteration<T, R> iterateDelta(DataSet<R> workset, int maxIterations, int... keyPositions) {
		Keys.FieldPositionKeys<T> keys = new Keys.FieldPositionKeys<T>(keyPositions, getType(), false);
		return new DeltaIteration<T, R>(getExecutionEnvironment(), getType(), this, workset, keys, maxIterations);
	}
public < R > DeltaIteration < T , R > iterateDelta ( DataSet < R > workset , int maxIterations , int ... keyPositions ) { Keys . FieldPositionKeys < T > keys = new Keys . FieldPositionKeys < T > ( keyPositions , getType ( ) , false ) ; return new DeltaIteration < T , R > ( getExecutionEnvironment ( ) , getType ( ) , this , workset , keys , maxIterations ) ; }
Initiates a delta iteration. A delta iteration is similar to a regular iteration (as started by {@link #iterate(int)},
but maintains state across the individual iteration steps. The Solution set, which represents the current state
at the beginning of each iteration can be obtained via {@link DeltaIteration#getSolutionSet()} ()}.
It can be be accessed by joining (or CoGrouping) with it. The DataSet that represents the workset of an iteration
can be obtained via {@link DeltaIteration#getWorkset()}.
The solution set is updated by producing a delta for it, which is merged into the solution set at the end of each
iteration step.
<p>
The delta iteration must be closed by calling {@link DeltaIteration#closeWith(DataSet, DataSet)}. The two
parameters are the delta for the solution set and the new workset (the data set that will be fed back).
The return value of the {@code closeWith(DataSet, DataSet)} method is the resulting
data set after the iteration has terminated. Delta iterations terminate when the feed back data set
(the workset) is empty. In addition, a maximum number of steps is given as a fall back termination guard.
<p>
Elements in the solution set are uniquely identified by a key. When merging the solution set delta, contained elements
with the same key are replaced.
<p>
<b>NOTE:</b> Delta iterations currently support only tuple valued data types. This restriction
will be removed in the future. The key is specified by the tuple position.
<p>
A code example for a delta iteration is as follows
<pre>
{@code
DeltaIteration<Tuple2<Long, Long>, Tuple2<Long, Long>> iteration =
initialState.iterateDelta(initialFeedbakSet, 100, 0);

DataSet<Tuple2<Long, Long>> delta = iteration.groupBy(0).aggregate(Aggregations.AVG, 1)
.join(iteration.getSolutionSet()).where(0).equalTo(0)
.flatMap(new ProjectAndFilter());

DataSet<Tuple2<Long, Long>> feedBack = delta.join(someOtherSet).where(...).equalTo(...).with(...);

// close the delta iteration (delta and new workset are identical)
DataSet<Tuple2<Long, Long>> result = iteration.closeWith(delta, feedBack);
}
</pre>

@param workset The initial version of the data set that is fed back to the next iteration step (the workset).
@param maxIterations The maximum number of iteration steps, as a fall back safeguard.
@param keyPositions The position of the tuple fields that is used as the key of the solution set.

@return The DeltaIteration that marks the start of a delta iteration.

@see DeltaIteration