CodeGym /Java Blog /এলোমেলো /হ্যাশম্যাপ computeIfAbsent() জাভাতে পদ্ধতি
John Squirrels
লেভেল 41
San Francisco

হ্যাশম্যাপ computeIfAbsent() জাভাতে পদ্ধতি

এলোমেলো দলে প্রকাশিত
জাভা 8, আমরা অনেকেই জানি, স্ট্রিম API চালু করেছে। এটি একটি খুব দরকারী টুলকিট, কিন্তু এটি একটি অপূর্ণতা আছে, এটি মানচিত্র s অন্তর্ভুক্ত করে না . যাইহোক, জাভা 8 "খারাপ" কোডের পরিমাণ কমাতে মানচিত্র ইন্টারফেসেই বেশ কিছু দরকারী পদ্ধতি যোগ করেছে । সুতরাং, যদি আপনাকে মানচিত্রের মান সহ কিছু ক্রিয়া সম্পাদন করতে হয় , যদি এটি এতে বিদ্যমান থাকে তবে জাভা মানচিত্রে একটি ComputeIfPresent() পদ্ধতি রয়েছে। ম্যাপে নেই এমন একটি মান দিয়ে আপনার কিছু করার প্রয়োজন হলে , আপনি ComputeIfAbsent() পদ্ধতি ব্যবহার করতে পারেন। আমরা এই নিবন্ধে এটি বিবেচনা করবে।

computeIfAbsent() পদ্ধতি স্বাক্ষর


default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
মানচিত্র (এবং HashMap ) computeIfAbsent () পদ্ধতিতে দুটি পরামিতি লাগে। প্রথম প্যারামিটার হল কী। দ্বিতীয় প্যারামিটারটি ম্যাপিং ফাংশন । এই পদ্ধতিতে ম্যাপিং ফাংশনটি শুধুমাত্র তখনই বলা হয় যদি ম্যাপিং উপস্থাপন করা না হয়।

কিভাবে computeIfAbsent() পদ্ধতি কাজ করে

আমরা ইতিমধ্যে জানি, Map.computeIfAbsent() পদ্ধতিটি দুটি প্যারামিটার, কী এবং এই কী ম্যাপিং ফাংশনের মান গণনার জন্য ফাংশন পাস করেছে । এখানে পদ্ধতির লজিক্যাল অ্যালগরিদম:
  1. পদ্ধতিটি প্রথমে পরীক্ষা করে যে পাস করা কীটি আমাদের মানচিত্রে উপস্থাপন করা হয়েছে কিনা ।
  2. যদি কীটি মানচিত্রে উপস্থাপন করা হয় (এবং এটি শূন্য নয়), তবে পদ্ধতিটি কিছুই করে না।
  3. অন্যথায় যদি কীটি মানচিত্রে প্রতিনিধিত্ব না করে (বা এটি শূন্য) পদ্ধতিটি কীটির ম্যাপিং ফাংশন ব্যবহার করে মান গণনা করে।
  4. যদি ফলাফলের মানটি শূন্য না হয়, তাহলে মানচিত্রের জন্য একটি কী-মান জোড়া লিখুন।
আসুন কোড হিসাবে একই যুক্তি লিখি:

if (map.get(key) == null) 
{ 
V newValue = mappingFunction.apply(key); 
if (newValue != null) map.put(key, newValue); 
}

computeIfAbsent() কোড উদাহরণ

সুতরাং, মানটি যদি মানচিত্রে না থাকে , তাহলে পদ্ধতিটি পরিবর্তনগুলি সম্পাদন করবে। আসুন একটি সহজ উদাহরণ দেখে নেওয়া যাক:

import java.util.HashMap;
import java.util.Map;

//map.computeIfAbsent example 
public class ComputeIfAbsentExample {

       public static void main(String[] args) {

           Map<String, String> myMap = new HashMap<>();

           myMap.computeIfAbsent("here is my key", key -> key + ", " + "and this is a new value");

           System.out.println(myMap.get("here is my key"));
       }
}
আউটপুট হল:
এখানে আমার কী, এবং এটি একটি নতুন মান
এখন দেখা যাক ম্যাপে একটি প্রদত্ত মান থাকলে পদ্ধতিটি কী করবে । স্পয়লার সতর্কতা: এটি কিছুই করবে না।

import java.util.HashMap;
import java.util.Map;

public class ComputeIfAbsentExample2 {

       public static void main(String[] args) {

           Map<String, String> myMap = new HashMap<>();
           myMap.put("here is my key", "and here is my value");

           myMap.computeIfAbsent("here is my key", key -> key + ", " + "and this is a new value");

           System.out.println(myMap.get("here is my key"));
       }
}
এখানে আউটপুট আছে:
এবং এখানে আমার মান
আপনি দেখতে পাচ্ছেন, মান অপরিবর্তিত রয়েছে।

আরও একটি ComputeIfAbsent() উদাহরণ

আপনি ক্যাশিং ধারণার সাথে পরিচিত হলে, computeIfAbsent() পদ্ধতি সম্ভবত আপনাকে কিছু মনে করিয়ে দেয়। এর একটি আরো জটিল পার্সিং উদাহরণ কটাক্ষপাত করা যাক. আসুন computeIfAbsent() পদ্ধতিটিকে দুইবার কল করি তা নিশ্চিত করতে যে প্রথম ক্ষেত্রে মান পরিবর্তন হয়, দ্বিতীয় ক্ষেত্রে তা হয় না।

import java.util.HashMap;
import java.util.Map;

public class ComputeIfAbsentExample {
   private static Map<String, Long> numbersMap = new HashMap<>();

   public static Long stringToLong(String str) {
       return numbersMap.computeIfAbsent(str, key -> {
           System.out.println("parsing: " + key);
           return Long.parseLong(key);
       });
   }

   public static void main(String[] args) {
       // will print:
       // > parsing: 10
       // > parsing: 25
       // > 10+25=35
       System.out.println("10+25=" + (stringToLong("10") + stringToLong("25")));
       // will print:
       // > parsing: 20
       // > 10+25=45
       // only "20" will be parsed this time, since "25" was already parsed and placed into `numbersMap` map before
       System.out.println("20+25=" + (stringToLong("20") + stringToLong("25")));
       // will print:
       // > 10+20=30
       // no parsing will occur, since both "10" and "20" were already parsed and placed into `numbersMap` map before
       System.out.println("10+20=" + (stringToLong("10") + stringToLong("20")));
   }

}
এখানে আউটপুট আছে:
পার্সিং: 10 পার্সিং: 25 10+25=35 পার্সিং: 20 20+25=45 10+20=30
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION