English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تعليميات Java الأساسية

تحكم في العملية Java

مجموعات Java Array

Java Object-Oriented (I)

Java Object-Oriented (II)

Java Object-Oriented (III)

معالجة الاستثناءات Java

قائمة Java List

Java Queue (الطابور)

مجموعات Java Map

مجموعات Java Set

إدخال/إخراج Java (I/O)

قراء/كتابة Java

مواضيع أخرى في Java

استخدام طريقة merge() في Java HashMap مع أمثلة

Java HashMap Methods

إذا لم يكن المفتاح المحدد موجودًا، فإن طريقة merge() في Java HashMap ستضيف خريطة المفتاح/القيمة إلى الخريطة.

لكن، إذا كان المفتاح المحدد مرتبط بالقيمة، فإن الطريقة ستستبدل القيمة القديمة بالناتج من الدالة المحددة.

تكون صيغة طريقة merge() كالتالي:

hashmap.merge(key, قيمة, remappingFunction)

معلمات merge()

يستخدم طريقة merge() 3 معلمات:

  • مفتاح - يجب تحديد القيمة المرتبطة بالمفتاح

  • قيمة - إذا كان المفتاح مرتبط بأي قيمة، فإنه يجب مرتبط بالقيمة المرتبطة بالمفتاح.

  • remappingFunction - إذا كان المفتاح مرتبط بالقيمة، فإن النتيجة مرتبطة بالمفتاح.

إرجاع merge()

  • سيتم إرجاع القيمة الجديدة المرتبطة بالمفتاح (key)

  • إذا لم يكن هناك أي قيمة مرتبطة بالمفتاح (key)، فإنه سيتم إرجاع null

ملاحظةإذا كانت نتيجة remappingFunction null، فإن سيتم حذف المخطط المحدد للمفتاح المحدد.

مثال1: إدراج مدخل جديد باستخدام merge() في HashMap

إدخال java.util.HashMap;
class Main {}}
  public static void main(String[] args) {
    // إنشاء hashmap
    HashMap<String, Integer> prices = new HashMap<>();
    // إضافة عنصر إلى جدول القيم
    prices.put("Shoes", 200);
    prices.put("Bag", 300);
    prices.put("Pant", 150);
    System.out.println("HashMap: " + prices);
    int returnedValue = prices.merge("Shirt", 100, (oldValue, newValue) -> oldValue + newValue);
    System.out.println("سعر القميص: " + returnedValue);
    //طباعة HashMap التحديث
    System.out.println("HashMap بعد التحديث: " + prices);
  }
}

نتيجة الإخراج

HashMap: {Pant=150, Bag=300, Shoes=200}
سعر القميص: 100
HashMap بعد التحديث: {Pant=150, Shirt=100, Bag=300, Shoes=200}

في المثال السابق، قمنا بإنشاء مخطط برسم prices. لاحظ التعبير

prices.merge("Shirt", 100, (oldValue, newValue) -> oldValue + newValue)

في هذا السياق، استخدمنا تعبير lambda (oldValue, newValue) -> oldValue + newValue) كـ remappingFunction. للحصول على معلومات إضافية حول تعبيرات lambda، يرجى زيارةJava Expressions Lambda.

بما أن المفتاح Shirt غير موجود في prices، فإن طريقة merge() سترفع مدخل Shirt=100 إلى المخطط، وسيتم تجاهل نتيجة remappingFunction.

مثال2: إدراج مدخلات تحتوي على مفتاح مكرر باستخدام merge() في HashMap

إدخال java.util.HashMap;
class Main {}}
  public static void main(String[] args) {
    // 创建 HashMap
    HashMap<String, String> countries = new HashMap<>();
    // إدراج سجل في HashMap
    countries.put("Washington", "America");
    countries.put("Canberra", "Australia");
    countries.put("Madrid", "Spain");
    System.out.println("HashMap: " + countries);
    // دمج خريطة لـ Washington مفتاح
    String returnedValue = countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue);
    System.out.println("Washington: " + returnedValue);
    // طباعة HashMap بعد التحديث
    System.out.println("HashMap بعد التحديث: " + countries);
  }
}

نتيجة الإخراج

HashMap: {Madrid=Spain, Canberra=Australia, Washington=America}
Washington: America/USA
HashMap بعد التحديث: {Madrid=Spain, Canberra=Australia, Washington=America/USA},

في المثال السابق، قمنا بإنشاء خريطة هاشة تُدعى countries. لاحظ التعبير

countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue)

في هذا السياق، استخدمنا تعبير lambda (oldValue, newValue) -> oldValue + "/" + newValue) كـ remappingFunction.

بسبب أن مفتاح Washington موجود بالفعل في countries، سيتم استبدال القيمة القديمة بمقدار العودة من remappingFunction. لذلك، تشمل خريطة Washington القيمة America/USA.

مثال3: دمج HashMap() دمج اثنين من HashMap

إدخال java.util.HashMap;
class Main {}}
  public static void main(String[] args) {
    // إنشاء hashmap
    HashMap<String, Integer> prices1 = new HashMap<>();
    // إضافة عنصر إلى جدول القيم
    prices1.put("Pant", 230);
    prices1.put("Shoes", 350);
    System.out.println("جدول القيم 1: " + prices1);
    // إنشاء hashmap آخر
    HashMap<String, Integer> prices2 = new HashMap<>();
    // إضافة عنصر إلى جدول القيم
    prices2.put("Shirt", 150);
    prices2.put("Shoes", 320);
    System.out.println("جدول القيم 2: " + prices2);
    // forEach() يصلق على كل عنصر في prices2
    // merge() يضيف كل عنصر من prices2 إلى prices1
    prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> {
      
      // العودة إلى القيمة الأصغر
      if (oldValue < newValue) {
        return oldValue;
      }
      else {
        return newValue;
      }
    });
    System.out.println("جدول القيم المدمج: " + prices1);
  }
}

نتيجة الإخراج

جدول القيم 1: {Pant=230, Shoes=350}
جدول القيم 2: {Shirt=150, Shoes=320}
جدول القيم المدمج: {Pant=230, Shirt=150, Shoes=320}

في المثال السابق، قمنا بإنشاء اثنين من التحويلات الديناميكية المسماة prices1 وprices2. لاحظ الكود،

    prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> {
      if (oldValue < newValue) {
        return oldValue;
      }
      else {
        return newValue;
      }
    });

في هذا السياق،HashMap forEach()يصلق على كل عنصر في جدول القيم prices2 ويضعه في جدول القيم prices1. لقد استخدمنا lambda تعبيرتين:

  • (key, value) -> prices.merge(...) - إنه يزور كل عنصر في prices1 ويقوم بتوصيله إلى طريقة merge().

  • (oldValue, newValue) -> {...}  - هذه هي دالة الت映射 (remappingFunction). إنها تقارن بين القيم وتعيد القيمة الأصغر.

بسبب وجود مفتاح Shoes في كلا المخططات المفاتيحية، يتم استبدال قيمة Shoes بنتيجة دالة الت映射 (remappingFunction).

Java HashMap merge() و putAll()

يمكننا أيضًا استخدام طريقة putAll() لدمج اثنين من المخططات المفاتيحية. ولكن، إذا كان هناك مفتاح في كلا المخططات المفاتيحية، يتم استبدال القيمة القديمة بالقيمة الجديدة

مختلفة عن merge()، لا يقدم طريقة putAll() إعادة الت映射. لذلك، لا يمكننا تحديد القيمة التي ستخزن للاحتفاظ بالключ المكرر.

للحصول على معلومات إضافية حول هذه الطريقة putAll()، يرجى زيارةJava HashMap putAll().

Java HashMap Methods