blob: 277ce90716291c7fc1da97705b4177b3693b1cc4 [file] [log] [blame]
package org.eclipse.jst.jsf.common.sets.mapping;
import java.util.Iterator;
import org.eclipse.jst.jsf.common.sets.AxiomaticSet;
/**
* A type of axiomatic set mapping that operates injectively on the output
* set to create its result set. Note that the injection (one-to-oneness)
* of the mapping is based on Java objects and not on the value of the object.
* Therefore, the result set is not guaranteed to be injective on the basis
* of value.
*
* For example, consider a set of integers:
*
* X = {new Integer(4), new Integer(6), new Integer(9)}
*
* an ObjectInjectiveSetMapping may be defined that maps this set
* to a result based on:
*
* map(x) = new Boolean(x < 8) for all x in X
*
* An ObjectiveInjectiveSetMapping result set would look like this:
*
* map(X) = {new Boolean(true), new Boolean(true), new Boolean(false)}
*
* Note that boolean TRUE maps twice, so based on the value of the set members,
* the mapping is not injective. However, each Java object in X maps to a
* distinct Java object in map(X)
*
* This interface should not be implemented by clients. Clients should
* sub-class AbstractObjectInjectiveSetMapping to avoid future API breakage.
*
* @author cbateman
*
*/
public interface ObjectInjectiveSetMapping extends AxiomaticSetMapping
{
/**
* This method optimizes the case where a client wants to apply some
* mapping or constraint to each element of a set until a particular
* condition applies and then stop.
*
* Mapping's that implement this
* interface should generally implement their map(set) method as:
*
* for (Iterator it = mapIterator(set); it.hasNext();)
* {
* result.add(doMapping(it.next));
* }
*
* @param set
* @return an iterator that allows a client to apply the mapping
* one element of set at a time. The iterator is immutable and should
* throw UnsupportedOperationException if remove() is called.
*/
public Iterator mapIterator(AxiomaticSet set);
}