كيفية دمج قائمتين في Java: 5 طرق عملية مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا دمج القوائم في Java وكيف لا ترتبك



تخيل: لديك قائمتان من المهام - "العاجلة" و"المهمة". أو قائمتان من العملاء - من قاعدة البيانات الشهر الماضي والشهر الحالي. للعمل معهم ككيان واحد، تحتاج إلى دمجهما. في Java، هذه المهمة شائعة جدًا لدرجة أن سؤال «How do I join two lists in Java?» على Stack Overflow يجمع آلاف المشاهدات. وهذا ليس من قبيل الصدفة: غالبًا ما يسبب دمج القوائم ارتباكًا للمبتدئين - إما خطأ في الترجمة، أو أن القائمة غير قابلة للتغيير، أو فقدان البيانات.



في هذه المقالة، سنستعرض 5 طرق مثبتة لدمج قائمتين في Java - من الطريقة الكلاسيكية addAll إلى الطريقة الأنيقة Stream API. ستتعرف على الطريقة المناسبة لمواقف مختلفة، وكيفية تجنب المخاطر وكتابة كود يعمل بسرعة ويمكن التنبؤ به. هيا بنا!



الطريقة 1: addAll الكلاسيكية - بسيطة وموثوقة



الطريقة الأكثر مباشرة هي استخدام طريقة addAll() من واجهة Collection. تضيف جميع عناصر مجموعة إلى أخرى. يبدو الأمر مثاليًا، ولكن هناك فارق بسيط: إنها تغير القائمة الأصلية. إذا كنت بحاجة إلى الحفاظ على القوائم الأصلية دون تغيير - فأنشئ قائمة جديدة.



مثال: الدمج مع الحفاظ على النسخ الأصلية



import java.util.ArrayList;import java.util.List;

public class JoinListsExample { public static void main(String[] args) { List<String> listA = new ArrayList<>(List.of("Java", "Python", "C++")); List<String> listB = new ArrayList<>(List.of("JavaScript", "Go", "Rust"));

// إنشاء قائمة جديدة وإضافة كلتا القائمتين إليها List<String> mergedList = new ArrayList<>(listA); mergedList.addAll(listB);

System.out.println(mergedList); // [Java, Python, C++, JavaScript, Go, Rust] // القوائم الأصلية لم تتغير }}


الإيجابيات: بديهية، تعمل مع أي نوع من List، لا تتطلب Java 8+.

السلبيات: تغير القائمة الأصلية إذا لم يتم إنشاء قائمة جديدة؛ لا تدعم الحسابات البطيئة.



الطريقة 2: Stream API - حديث ومرن



إذا كنت تستخدم Java 8 أو أحدث، فإن Stream API يقدم طريقة أنيقة لدمج القوائم. لا يغير البيانات الأصلية ويمكن دمجه بسهولة مع عمليات أخرى - التصفية والترتيب والتحويل.



الدمج الأساسي باستخدام Stream.concat



import java.util.List;import java.util.stream.Collectors;import java.util.stream.Stream;

public class StreamJoinExample { public static void main(String[] args) { List<String> listA = List.of("أحمر", "أخضر", "أزرق"); List<String> listB = List.of("أصفر", "بنفسجي");

List<String> mergedList = Stream.concat(listA.stream(), listB.stream()) .collect(Collectors.toList());

System.out.println(mergedList); // [أحمر, أخضر, أزرق, أصفر, بنفسجي] }}


الدمج مع التصفية والترتيب



لنفترض أنك بحاجة إلى دمج قائمتين من الأرقام، والاحتفاظ بالأرقام الزوجية فقط وترتيبها تنازليًا:



import java.util.List;import java.util.Comparator;import java.util.stream.Collectors;import java.util.stream.Stream;

public class StreamAdvancedJoin { public static void main(String[] args) { List<Integer> listA = List.of(5, 2, 8, 1); List<Integer> listB = List.of(7, 4, 9, 3);

List<Integer> result = Stream.concat(listA.stream(), listB.stream()) .filter(n -> n % 2 == 0) // فقط الأرقام الزوجية .sorted(Comparator.reverseOrder()) .collect(C

المدونات

توصيات الكتب