আপনাকে এমন একটি ইন্টারফেস তৈরি করতে হবে যা আপনাকে চারপাশে যেতে চান এমন ফাংশন সরবরাহ করে। উদাহরণ:
/**
* 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);
}
তারপরে, যখন আপনাকে কোনও ফাংশন পাস করার দরকার হয়, আপনি সেই ইন্টারফেসটি প্রয়োগ করতে পারেন:
List<Integer> result = CollectionUtilities.map(list,
new Function1<Integer, Integer>() {
@Override
public Integer eval(Integer a) {
return a * a;
}
});
পরিশেষে, মানচিত্রের ফাংশনটি ফাংশন 1 এ পাস হিসাবে নিম্নলিখিতটি ব্যবহার করে:
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;
}
প্যারামিটারগুলিতে পাস করার প্রয়োজন না হলে আপনি প্রায়শই নিজের ইন্টারফেসের পরিবর্তে রান্নেবল ব্যবহার করতে পারেন, বা পরমকে গণনা কম "স্থির" করার জন্য আপনি বিভিন্ন অন্যান্য কৌশল ব্যবহার করতে পারেন তবে এটি সাধারণত সুরক্ষা সহ এক বাণিজ্য off (অথবা আপনার ফাংশন অবজেক্টটি সেইভাবে পাস করার জন্য আপনি কনস্ট্রাক্টরকে ওভাররাইড করতে পারেন .. প্রচুর পদ্ধতির প্রচলন রয়েছে এবং কিছু কিছু পরিস্থিতিতে আরও ভাল কাজ করে))