English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
إذا لم يكن المفتاح المحدد موجودًا، فإن طريقة merge() في Java HashMap ستضيف خريطة المفتاح/القيمة إلى الخريطة.
لكن، إذا كان المفتاح المحدد مرتبط بالقيمة، فإن الطريقة ستستبدل القيمة القديمة بالناتج من الدالة المحددة.
تكون صيغة طريقة merge() كالتالي:
hashmap.merge(key, قيمة, remappingFunction)
يستخدم طريقة merge() 3 معلمات:
مفتاح - يجب تحديد القيمة المرتبطة بالمفتاح
قيمة - إذا كان المفتاح مرتبط بأي قيمة، فإنه يجب مرتبط بالقيمة المرتبطة بالمفتاح.
remappingFunction - إذا كان المفتاح مرتبط بالقيمة، فإن النتيجة مرتبطة بالمفتاح.
سيتم إرجاع القيمة الجديدة المرتبطة بالمفتاح (key)
إذا لم يكن هناك أي قيمة مرتبطة بالمفتاح (key)، فإنه سيتم إرجاع null
ملاحظةإذا كانت نتيجة remappingFunction null، فإن سيتم حذف المخطط المحدد للمفتاح المحدد.
إدخال 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.
إدخال 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.
إدخال 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).
يمكننا أيضًا استخدام طريقة putAll() لدمج اثنين من المخططات المفاتيحية. ولكن، إذا كان هناك مفتاح في كلا المخططات المفاتيحية، يتم استبدال القيمة القديمة بالقيمة الجديدة
مختلفة عن merge()، لا يقدم طريقة putAll() إعادة الت映射. لذلك، لا يمكننا تحديد القيمة التي ستخزن للاحتفاظ بالключ المكرر.
للحصول على معلومات إضافية حول هذه الطريقة putAll()، يرجى زيارةJava HashMap putAll().