CodeGym /جاوا بلاگ /Random-UR /جاوا میں HashMap computeIfAbsent() طریقہ
John Squirrels
سطح
San Francisco

جاوا میں HashMap computeIfAbsent() طریقہ

گروپ میں شائع ہوا۔
جاوا 8، جیسا کہ ہم میں سے بہت سے لوگ جانتے ہیں، نے اسٹریم API متعارف کرایا۔ یہ ایک بہت مفید ٹول کٹ ہے، لیکن اس میں ایک خرابی ہے، اس میں Map s شامل نہیں ہے ۔ تاہم، جاوا 8 نے "خراب" کوڈ کی مقدار کو کم کرنے کے لیے خود میپ انٹرفیس میں کئی مفید طریقے شامل کیے ہیں ۔ لہذا، اگر آپ کو Map میں قدر کے ساتھ کچھ کارروائی کرنے کی ضرورت ہے ، اگر یہ اس میں موجود ہے، تو جاوا میپ میں ComputeIfPresent() طریقہ موجود ہے۔ اگر آپ کو ایسی قدر کے ساتھ کچھ کرنے کی ضرورت ہے جو Map میں نہیں ہے ، تو آپ ComputeIfAbsent() طریقہ استعمال کر سکتے ہیں۔ ہم اس مضمون میں اس پر غور کریں گے۔

computeIfAbsent() طریقہ دستخط

default V computeIfAbsent(K key, Function<? super K, ? extends V> mappingFunction)
Map (اور HashMap ) computeIfAbsent () طریقہ دو پیرامیٹرز لیتا ہے۔ پہلا پیرامیٹر کلید ہے۔ دوسرا پیرامیٹر میپنگ فنکشن ہے ۔ اس طریقہ میں میپنگ فنکشن کو صرف اس صورت میں کہا جاتا ہے جب میپنگ پیش نہ کی گئی ہو۔

computeIfAbsent() طریقہ کیسے کام کرتا ہے۔

جیسا کہ ہم پہلے ہی جانتے ہیں، Map.computeIfAbsent() طریقہ دو پیرامیٹرز سے گزرا ہے، کلید اور اس کلید میپنگ فنکشن کی قدر کا حساب لگانے کے لیے فنکشن ۔ طریقہ کار کا منطقی الگورتھم یہ ہے:
  1. طریقہ پہلے چیک کرتا ہے کہ آیا پاس شدہ کلید کو ہمارے نقشے میں دکھایا گیا ہے ۔
  2. اگر نقشہ میں کلید کی نمائندگی کی جاتی ہے (اور یہ کالعدم نہیں ہے)، تو طریقہ کچھ نہیں کرتا ہے۔
  3. بصورت دیگر اگر کلید نقشہ میں نمائندگی نہیں کرتی ہے (یا یہ null ہے) طریقہ کلید میں میپنگ فنکشن کا استعمال کرتے ہوئے قدر کا حساب لگاتا ہے۔
  4. اگر نتیجے میں آنے والی قدر کالعدم نہیں ہے، تو نقشہ بنانے کے لیے کلیدی قدر کا جوڑا لکھیں۔
آئیے وہی منطق لکھتے ہیں جیسے کوڈ:
if (map.get(key) == null)
{
V newValue = mappingFunction.apply(key);
if (newValue != null) map.put(key, newValue);
}

computeIfAbsent() کوڈ کی مثال

لہذا، اگر قیمت Map میں نہیں ہے ، تو طریقہ تبدیلیاں کرے گا۔ آئیے ایک سادہ سی مثال پر ایک نظر ڈالتے ہیں:
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