ধরুন আপনার নিম্নলিখিত কোড রয়েছে:
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class Test {
public static void main(String[] s) {
Map<String, Boolean> whoLetDogsOut = new ConcurrentHashMap<>();
whoLetDogsOut.computeIfAbsent("snoop", k -> f(k));
whoLetDogsOut.computeIfAbsent("snoop", k -> f(k));
}
static boolean f(String s) {
System.out.println("creating a value for \""+s+'"');
return s.isEmpty();
}
}
তারপরে আপনি বার্তাটি দেখতে পাবেন creating a value for "snoop"
ঠিক দ্বিতীয় বারের মতো, computeIfAbsent
ইতিমধ্যে সেই কীটির জন্য একটি মান রয়েছে। k
ল্যামডা এক্সপ্রেশনেk -> f(k)
মাত্র কী ব্যবহার করুন যা মানচিত্রের মান কম্পিউটিং জন্য আপনার ল্যামডা পাস জন্য একটি placeolder (প্যারামিটার) হয়। সুতরাং উদাহরণে কীটি ফাংশন অনুরোধে পাস করা হয়েছে।
বিকল্পভাবে আপনি লিখতে পারেন: whoLetDogsOut.computeIfAbsent("snoop", k -> k.isEmpty());
সাহায্যকারী পদ্ধতি ছাড়াই একই ফলাফল অর্জন করতে (তবে আপনি তখন ডিবাগিং আউটপুট দেখতে পাবেন না)। এমনকি সহজ, এটি কোনও বিদ্যমান পদ্ধতির একটি সহজ প্রতিনিধি যা আপনি লিখতে পারেন:whoLetDogsOut.computeIfAbsent("snoop", String::isEmpty);
এই প্রতিনিধিদলের কোনও পরামিতি লেখার প্রয়োজন নেই।
আপনার প্রশ্নের উদাহরণ কাছাকাছি হতে, আপনি এটা লিখতে পারে যেমন whoLetDogsOut.computeIfAbsent("snoop", key -> tryToLetOut(key));
(এটা কোন ব্যাপার না কিনা প্যারামিটার নাম k
বা key
)। অথবা এটা লিখতে যেমন whoLetDogsOut.computeIfAbsent("snoop", MyClass::tryToLetOut);
যদি tryToLetOut
হয় static
বা whoLetDogsOut.computeIfAbsent("snoop", this::tryToLetOut);
যদি tryToLetOut
একটি দৃষ্টান্ত পদ্ধতি।