package org.seqcode.gsebricks.verbs;
/** a Mapper is a filter whose output cannot be null, eg it
* maps an object of type A to an object of type B
*
*/
public interface Mapper<A,B> extends Filter<A,B> {
public B execute(A a);
public static class Compose<X,Y,Z> implements Mapper<X,Z> {
private Mapper<X,Y> first;
private Mapper<Y,Z> second;
public Compose(Mapper<X,Y> f1, Mapper<Y,Z> f2) {
first = f1;
second = f2;
}
public Z execute(X a) {
return second.execute(first.execute(a));
}
}
public static class Identity<X> implements Mapper<X,X> {
public Identity() {}
/* (non-Javadoc)
* @see org.seqcode.gsebricks.verbs.Mapper#execute(java.lang.Object)
*/
public X execute(X a) {
return a;
}
}
}