İletmek istediğiniz işlevleri sağlayan bir arabirim oluşturmanız gerekir. Örneğin:
/**
* A simple interface to wrap up a function of one argument.
*
* @author rcreswick
*
*/
public interface Function1<S, T> {
/**
* Evaluates this function on it's arguments.
*
* @param a The first argument.
* @return The result.
*/
public S eval(T a);
}
Ardından, bir işlevi geçirmeniz gerektiğinde, bu arabirimi uygulayabilirsiniz:
List<Integer> result = CollectionUtilities.map(list,
new Function1<Integer, Integer>() {
@Override
public Integer eval(Integer a) {
return a * a;
}
});
Son olarak, map işlevi, İşlev1'de iletilen aşağıdaki gibi kullanır:
public static <K,R,S,T> Map<K, R> zipWith(Function2<R,S,T> fn,
Map<K, S> m1, Map<K, T> m2, Map<K, R> results){
Set<K> keySet = new HashSet<K>();
keySet.addAll(m1.keySet());
keySet.addAll(m2.keySet());
results.clear();
for (K key : keySet) {
results.put(key, fn.eval(m1.get(key), m2.get(key)));
}
return results;
}
Parametreleri iletmeniz gerekmiyorsa, genellikle kendi arabiriminiz yerine Runnable'ı kullanabilirsiniz veya parametre sayısını daha az "sabit" hale getirmek için çeşitli teknikler kullanabilirsiniz, ancak genellikle tür güvenliği olan bir ödünleşmedir. (Ya da işlev nesnenizin parametrelere bu şekilde geçmesi için yapıcıyı geçersiz kılabilirsiniz. Çok sayıda yaklaşım vardır ve bazıları belirli durumlarda daha iyi çalışır.)