"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > تيارات جافا: الدليل النهائي للمبتدئين الكاملين

تيارات جافا: الدليل النهائي للمبتدئين الكاملين

تم النشر بتاريخ 2024-11-04
تصفح:449

لذا، أنت هنا لتتعرف على الجداول في جافا، ولكن ليس نوع الجداول التي يذهب إليها الناس للصيد أو تدفقات المياه. نحن نتحدث عن تدفقات البيانات، وهي ميزة قوية تم تقديمها في Java 8 والتي تجعل العمل مع البيانات أسهل كثيرًا. سواء كنت جديدًا على هذا الأمر أو جربته ولكنك لم تتمكن من حله تمامًا، فلا تقلق. سأرشدك خلال الرحلة بأكملها بلغة واضحة وسهلة الفهم.

مستعد؟ هيا بنا نتعمق في Java Streams!


Java Streams: The Ultimate Guide for Complete Beginners


ما هو الدفق في جافا؟

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

الأشياء الأساسية التي يجب تذكرها حول عمليات البث:

  1. لا تقوم التدفقات بتعديل البيانات الأصلية. فكر فيها على أنها طريقة عرض أو مسار عبر بياناتك.
  2. تعالج التدفقات البيانات بتكاسل، مما يعني أنها لا تقوم بأي عمل حقيقي حتى تطلب منها إنتاج نتيجة نهائية. وهذا يتجنب الحسابات غير الضرورية.
  3. يتم استخدام التدفقات لمرة واحدة. بمجرد استهلاك الدفق، فإنه قد اختفى. ستحتاج إلى إنشاء واحدة جديدة إذا كنت تريد إعادة استخدامها.

لماذا استخدام التدفقات؟

لماذا لا تستخدم فقط حلقة for أو تتعامل مع المجموعات مباشرة؟ حسنًا، هناك ثلاثة أسباب رئيسية:

  • رمز المنظف: لا حاجة لكتابة حلقات متكررة وضخمة. تمنحك التدفقات طريقة نظيفة وسهلة القراءة لمعالجة البيانات.
  • أداء أفضل: مع التقييم البطيء، تعالج التدفقات البيانات بكفاءة أكبر. إنهم يعملون فقط على البيانات عند الحاجة إليها، مما يمكن أن يوفر وقت المعالجة.
  • النمط الوظيفي: توفر التدفقات أسلوب برمجة وظيفي أكثر تعريفًا إلى Java، مما يعني أنك تركز على ما الذي تريد القيام به، وليس كيف.

كيف تعمل التدفقات؟ الأساسيات

دعونا نلقي نظرة على النوعين الرئيسيين لعمليات البث: المتوسطة و المحطة الطرفية.

1. العمليات الوسيطة

هذه هي العمليات التي تجهز البيانات ولكنها لا تنتج نتيجة نهائية على الفور. فكر في هذه الخطوات على أنها خطوات "ورشة العمل".

  • فلتر()

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

    java
    Copy code
    List numbers = Arrays.asList(1, 2, 3, 4, 5);
    List evenNumbers = numbers.stream()
                                       .filter(n -> n % 2 == 0)
                                       .collect(Collectors.toList());
    // Output: [2, 4]
    
    

    لماذا التصفية؟ بدون عامل التصفية()، ستحتاج إلى تكرار القائمة يدويًا وإضافة العناصر المطابقة فقط إلى القائمة الجديدة. يتيح لك عامل التصفية () القيام بذلك في خطوة واحدة واضحة.

  • رسم خريطة()

    هذا محول. يأخذ عنصرًا ويعيد شيئًا مختلفًا. على سبيل المثال، إذا كان لديك قائمة من السلاسل وتريد أطوال كل سلسلة:

    java
    Copy code
    List words = Arrays.asList("apple", "banana", "cherry");
    List lengths = words.stream()
                                 .map(String::length)
                                 .collect(Collectors.toList());
    // Output: [5, 6, 6]
    
    

    لماذا الخريطة؟ يتم استخدام الخريطة () عندما تحتاج إلى تحويل كل عنصر إلى شيء آخر، مثل تحويل قائمة السلاسل إلى قائمة أطوالها.

  • متميز()

    إنه مثل مرشح مكرر. يؤدي هذا إلى إزالة العناصر المكررة من الدفق.

    java
    Copy code
    List numbers = Arrays.asList(1, 2, 2, 3, 4, 4, 5);
    List distinctNumbers = numbers.stream()
                                           .distinct()
                                           .collect(Collectors.toList());
    // Output: [1, 2, 3, 4, 5]
    
    

    لماذا التميز؟ في القائمة العادية، ستحتاج إلى التحقق يدويًا من التكرارات. متميزة () تفعل ذلك لك في سطر واحد.

  • مرتبة()

    يعمل هذا على فرز بياناتك بترتيب طبيعي (أو بترتيب مخصص، إذا أردت).

    java
    Copy code
    List names = Arrays.asList("Charlie", "Alice", "Bob");
    List sortedNames = names.stream()
                                    .sorted()
                                    .collect(Collectors.toList());
    // Output: ["Alice", "Bob", "Charlie"]
    
    

    لماذا يتم الفرز؟ بدلاً من كتابة منطق الفرز بنفسك، يتولى الترتيب ()‎ الأمر نيابةً عنك.

2. العمليات الطرفية

هذه هي العناصر التي تنتج النتيجة النهائية، وتؤدي إلى معالجة الدفق بأكمله. فكر في هذه على أنها "نقطة الخروج".

  • يجمع()

    هذه هي العملية الطرفية الأكثر شيوعًا. فهو يجمع نتائج الدفق ويضعها في قائمة أو مجموعة أو مجموعة أخرى.

    java
    Copy code
    List names = Arrays.asList("Charlie", "Alice", "Bob");
    List upperNames = names.stream()
                                   .map(String::toUpperCase)
                                   .collect(Collectors.toList());
    // Output: ["CHARLIE", "ALICE", "BOB"]
    
    

    لماذا التجميع؟ ستستخدم دائمًا تقريبًا التجميع () لجمع نتائج التدفق الخاص بك في مجموعة. إنها محطتك النهائية.

  • forEach()

    إذا لم تكن بحاجة إلى نتيجة وتريد فقط تنفيذ إجراء على كل عنصر (مثل طباعتها)، فإن forEach() هو صديقك.

    java
    Copy code
    numbers.stream()
           .forEach(System.out::println);
    
    

    لماذا forEach؟ هذا مثالي للآثار الجانبية، مثل طباعة البيانات إلى وحدة التحكم أو الكتابة إلى ملف.

  • يقلل()

    reduce() يأخذ مجموعة من البيانات ويلخصها في نتيجة واحدة. على سبيل المثال، جمع قائمة من الأرقام:

    java
    Copy code
    int sum = numbers.stream()
                     .reduce(0, Integer::sum);
    // Output: 15
    
    

    لماذا التقليل؟ عندما تحتاج إلى دمج القيم أو تجميعها في نتيجة واحدة، فإن تقليل () هو الحل الأمثل لك.


أنواع أخرى من التدفقات

لا يتم إنشاء جميع التدفقات من المجموعات. توفر Java أنواعًا أخرى من التدفقات للتعامل مع أنواع مختلفة من البيانات:


Java Streams: The Ultimate Guide for Complete Beginners


  1. IntStream، LongStream، DoubleStream

    هذه التدفقات متخصصة في التعامل مع الأنواع البدائية. بدلاً من تحديد القيم وإلغاء تحديدها مثل Stream، يمكنك استخدام هذه لتجنب عقوبات الأداء.

    مثال:

    java
    Copy code
    IntStream intStream = IntStream.of(1, 2, 3, 4);
    int sum = intStream.sum();  // Output: 10
    
    
  2. دفق الملفات

    يمكنك إنشاء تدفقات من الملفات باستخدام Files.lines().

    java
    Copy code
    try (Stream lines = Files.lines(Paths.get("data.txt"))) {
        lines.forEach(System.out::println);
    } catch (IOException e) {
        e.printStackTrace();
    }
    
    

    لماذا نستخدم تدفقات الملفات؟ عند التعامل مع الملفات الكبيرة، قد لا يكون تحميل جميع البيانات في الذاكرة فعالاً. يتيح لك استخدام الدفق معالجتها سطرًا تلو الآخر.


متى تستخدم التدفقات؟

  • تحويل البيانات: عندما تحتاج إلى تعديل كل عنصر في المجموعة.
  • تصفية: عندما تريد تحديد البيانات التي تطابق شروط معينة فقط.
  • تجميع البيانات: عندما تحتاج إلى تقليل مجموعة إلى نتيجة واحدة (على سبيل المثال، المجموع، المتوسط).
  • المعالجة المتوازية: تدعم التدفقات أيضًا التوازي. باستخدام .parallelStream()، يمكنك تقسيم مهامك عبر عدة سلاسل عمليات لمعالجة أسرع.

الدفق مقابل الحلقات: لماذا لا نستخدم الحلقات فقط؟

سؤال جيد! دعونا نقارن:

  1. قابلية القراءة: مع عمليات البث، يمكنك التركيز على ما الذي تريد القيام به، وليس كيف. تميل الحلقات إلى جعلك تكتب الكثير من التعليمات البرمجية المعيارية الإضافية (مثل العدادات والشروط).
  2. الأداء: تم تحسين التدفقات للتعامل مع البيانات الكبيرة بكفاءة، خاصة مع التقييم البطيء والتوازي. لا تقدم الحلقات مثل هذه التحسينات المبتكرة.
  3. المرونة : تسمح لك التدفقات بتسلسل العمليات (مثل التصفية ورسم الخرائط والتقليل) بأسلوب نظيف وعملي. سوف تتطلب منك الحلقات دمج المزيد من المنطق بداخلها.

التفاف

تدور عمليات التدفق في Java حول تبسيط طريقة معالجة البيانات. إنها تجعل التعليمات البرمجية الخاصة بك أكثر قابلية للقراءة، وأسهل في الصيانة، وأكثر كفاءة عند العمل مع المجموعات. سواء كنت تقوم بتصفية البيانات أو تحويلها أو تقليلها، فإن التدفقات توفر لك طرقًا واضحة ومباشرة تلغي الحاجة إلى حلقات ضخمة وعمل يدوي.

الآن بعد أن أصبحت مجهزًا جيدًا بأساسيات التدفقات، لماذا تتوقف هنا؟ تابعني على Twitter أو LinkedIn أو قم بمراجعة مدونتي للحصول على المزيد من نصائح Java التي ستجعلك محترفًا في وقت قصير! وإذا وجدت هذا الدليل مفيدًا، فشاركه مع زملائك من المطورين — لأن المشاركة تعني الاهتمام!


هل أنت مستعد لتجربتها؟ هيا بنا نجعل هذا التدفق يتدفق في مشروعك القادم!

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/wittedtech-by-harshit/java-streams-the-ultimate-guide-for-complete-beginners-40e2?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3