একটি ম্যাপ হলো কী (key)-ভ্যালু জোড়া সংরক্ষণ করার একটি ডেটা স্ট্রাকচার। এটি অন্য প্রোগ্রামিং ভাষার ডিকশনারির মতোই। ম্যাপ ইন্টারফেসটি একটি ম্যাপের উপর অপারেশনগুলো সংজ্ঞায়িত করে।
Java-এ বিভিন্ন ধরনের ম্যাপ ইমপ্লিমেন্টেশন আছে। HashMap হলো বহুল ব্যবহৃত একটি।
// Make an instance
Map<String, Integer> fruitPrices = new HashMap<>();
put ব্যবহার করে ম্যাপে এন্ট্রি যোগ করুন।
fruitPrices.put("apple", 100);
fruitPrices.put("pear", 80);
// => { "apple" => 100, "pear" => 80 }
প্রতিটি কী (key)-এর সাথে কেবল একটি মান যুক্ত থাকতে পারে।
একই কী (key) দিয়ে put কল করলে ওই কী (key)-এর মান আপডেট হয়ে যাবে।
fruitPrices.put("pear", 40);
// => { "apple" => 100, "pear" => 40 }
একটি কী (key)-এর মান পেতে get ব্যবহার করুন।
fruitPrices.get("apple"); // => 100
ম্যাপে নির্দিষ্ট কোনো কী (key) আছে কি না দেখতে containsKey ব্যবহার করুন।
fruitPrices.containsKey("apple"); // => true
fruitPrices.containsKey("orange"); // => false
remove দিয়ে এন্ট্রি মুছে ফেলুন।
fruitPrices.put("plum", 90); // Add plum to map
fruitPrices.remove("plum"); // Removes plum from map
size মেথডটি এন্ট্রির সংখ্যা রিটার্ন করে।
fruitPrices.size(); // Returns 2
ম্যাপের কীগুলো বা ভ্যালুগুলোকে যথাক্রমে একটি Set বা একটি কালেকশন হিসেবে পেতে আপনি keySet বা values মেথড ব্যবহার করতে পারেন।
fruitPrices.keySet(); // Returns "apple" and "pear" in a set
fruitPrices.values(); // Returns 100 and 80, in a Collection
এই অনুশীলনীতে আপনি একটি Map ব্যবহার করে আন্তর্জাতিক ডায়ালিং কোডের একটি ডিকশনারি পরিচালনা করার কোড লিখবেন।
ডিকশনারিটি আন্তর্জাতিক ডায়ালিং কোড দিয়ে (ম্যাপের কী (key), যা একটি Integer) দেশের নাম (ম্যাপের মান, যা একটি String) খুঁজে বের করার সুযোগ দেয়,
getCodes মেথডটি বাস্তবায়ন করুন, যা কোনো প্যারামিটার নেয় না এবং ডিকশনারিতে বর্তমানে থাকা ডায়ালিং কোড থেকে দেশে একটি ম্যাপ রিটার্ন করে।
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.getCodes();
// => empty map
ডিকশনারিটি পূরণ করা প্রয়োজন।
setDialingCode মেথডটি বাস্তবায়ন করুন, যা একটি ডায়ালিং কোড এবং সংশ্লিষ্ট দেশ নেয় এবং ডায়ালিং কোড ও দেশ যোগ করে।
ডায়ালিং কোডটি যদি ইতিমধ্যেই ম্যাপে থাকে, তবে প্রদত্ত কোড ও দেশ দিয়ে ম্যাপটি আপডেট করুন।
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.setDialingCode(679, "Unknown");
// => { 679 => "Unknown" }
dialingCodes.setDialingCode(679, "Fiji");
// => { 679 => "Fiji" }
getCountry মেথডটি বাস্তবায়ন করুন, যা একটি ডায়ালিং কোড নেয় এবং ওই ডায়ালিং কোডের দেশের নাম রিটার্ন করে।
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.setDialingCode(55, "Brazil");
dialingCodes.getCountry(55);
// => "Brazil"
একটি ডায়ালিং কোড যোগ করার সময়, একটি কোড বা দেশ যাতে দুইবার যোগ না হয় সেদিকে খেয়াল রাখতে হবে।
এমন পরিস্থিতিতে, ধরে নেওয়া যেতে পারে যে প্রথম এন্ট্রিটিই সঠিক এন্ট্রি।
addNewDialingCode মেথডটি বাস্তবায়ন করুন, যা প্রদত্ত ডায়ালিং কোড ও দেশের জন্য একটি এন্ট্রি যোগ করে।
তবে setDialingCode মেথডের বিপরীতে, ডায়ালিং কোড বা দেশটি যদি ইতিমধ্যেই ম্যাপে থাকে তবে এটি কিছুই করে না।
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addNewDialingCode(32, "Belgium");
dialingCodes.addNewDialingCode(379, "Vatican City");
// => { 32 => "Belgium", 379 => "Vatican City" }
dialingCodes.addNewDialingCode(32, "Other");
dialingCodes.addNewDialingCode(39, "Vatican City");
// => { 32 => "Belgium", 379 => "Vatican City" }
এটি বিরল, তবে ভুল হতে পারে।
ভুলটি সংশোধন করার জন্য, দেশটি বর্তমানে কোন ডায়ালিং কোডে ম্যাপ করা আছে তা আমাদের জানতে হবে।
কোন ডায়ালিং কোডটি সংশোধন করা প্রয়োজন তা খুঁজে বের করার জন্য, findDialingCode মেথডটি বাস্তবায়ন করুন, যা একটি দেশ নেয় এবং সেই দেশের ডায়ালিং কোড রিটার্ন করে।
দেশটি যদি ম্যাপে না থাকে, তবে null রিটার্ন করুন।
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addDialingCode(44, "UK");
dialingCodes.findDialingCode("UK");
// => 44
dialingCodes.findDialingCode("Unlisted");
// => null
এখন যেহেতু আমরা জানি কোন ডায়ালিং কোডটি সংশোধন করা প্রয়োজন, তাই আমরা কোডটি আপডেট করতে এগোই।
updateCountryDialingCode মেথডটি বাস্তবায়ন করুন, যা দেশের নতুন ডায়ালিং কোড এবং দেশের নাম নেয় এবং সেই অনুযায়ী আপডেট করে।
দেশটি যদি ম্যাপে না থাকে তবে কিছুই করবেন না (কারণ এই মেথডটি কেবল ভুল সংশোধন করতে সহায়তা করার জন্য বোঝানো হয়েছে)।
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addDialingCode(88, "Japan");
// => { 88 => "Japan" }
dialingCodes.updateCountryDialingCode(81, "Japan");
// => { 81 => "Japan" }
dialingCodes.updateCountryDialingCode(32, "Mars");
// => { 81 => "Japan"}
Exercism-এ সাইন আপ করুন, Java ট্র্যাকের 26টি কনসেপ্ট158টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।