تدفقات جافا للمبتدئين: مقدمة لاستخدام التدفقات في جافا

تدفقات جافا للمبتدئين: مقدمة لاستخدام التدفقات في جافا

تسمح تدفقات Java 8 للمطورين باستخراج بيانات دقيقة من مجموعة كبيرة ، باستخدام مجموعة من العمليات المحددة مسبقًا.





قبل إصدار Java 8 ، كان استخدام مصطلح 'دفق' في Java مرتبطًا تلقائيًا بـ I / O. ومع ذلك ، قدمت Java 8 دفقًا يمكن الإشارة إليه على أنه مجموعة من الخطوات الحسابية المرتبطة ببعضها البعض في ما يشار إليه عادةً باسم 'خط أنابيب التدفق'.





ستقدم لك هذه المقالة تدفقات Java 8 وتوضح كيف يمكن أن تكون مفيدة في مشاريعك.





ما هو تيار؟

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

كيف تعمل الجداول

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



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

بعد إجراء جميع العمليات الوسيطة المطلوبة ، يمكنك تقديم عملية طرفية (مثل لكل () ) ، والتي ستنتج البيانات المستخرجة مسبقًا من المصدر.





الحياة بدون تيارات

تم إصدار Java 8 في عام 2014 ، ولكن قبل ذلك ، كان مطورو Java لا يزالون بحاجة إلى استخراج البيانات المتخصصة من مجموعة من البيانات العامة.

إنشاء صورة iso لنظام التشغيل Windows 10 من التثبيت الحالي

لنفترض أن لديك قائمة بالأحرف العشوائية التي يتم دمجها مع أرقام عشوائية لتكوين قيم سلسلة فريدة ، لكنك تريد فقط القيم التي تبدأ بالحرف C وتريد ترتيب النتيجة بترتيب تصاعدي. هذه هي الطريقة التي يمكنك من خلالها استخراج تلك البيانات بدون تدفقات.





متعلق ب: ما تحتاج لمعرفته حول استخدام الجمل في جافا

ترشيح وفرز القيم بدون مثال تدفقات


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//declare the array list will store needed values
List requiredValues = new ArrayList();
//extracting the required values and storing them in reqquiredValues
randomValues.forEach(value -> {
if(value.startsWith('C')) {
requiredValues.add(value);
}
});
//sort the requiredValues in ascending order
requiredValues.sort((String value1, String value2) -> value1.compareTo(value2));
//print each value to the console
requiredValues.forEach((String value) -> System.out.println(value));
}
}

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

متعلق ب: كيفية إنشاء وتنفيذ العمليات على المصفوفات في Java

ينتج الكود أعلاه الإخراج التالي في وحدة التحكم:


C11
C12
C13
C14
C15
C16

الحياة مع تيارات

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

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

ترشيح القيم وفرزها مع مثال دفق


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

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

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

الوظيفة النهائية في خط الأنابيب هي أ لكل () وظيفة. هذه وظيفة طرفية تُستخدم لإيقاف خط أنابيب التدفق وتنتج النتائج التالية في وحدة التحكم:


C11
C12
C13
C14
C15
C16

دفق العمليات الوسيطة

هناك قائمة واسعة من العمليات الوسيطة التي يمكن استخدامها في خط أنابيب التدفق.

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

في مثالنا أعلاه ، يتم استخدام اثنتين فقط من هذه العمليات الوسيطة --- منقي() و نوع() . ستعتمد العملية الوسيطة التي تختارها على المهام التي ترغب في تنفيذها.

إذا كانت أي من القيم التي تبدأ بـ C في قائمة المصفوفة أعلاه مكتوبة بأحرف صغيرة ، وقمنا بتنفيذ نفس العمليات الوسيطة عليها ، فسنحصل على النتيجة التالية.

إجراء عمليات التصفية والفرز على مثال القيم الصغيرة


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

سوف ينتج الكود أعلاه القيم التالية في وحدة التحكم:


C11
C12
C14
C15

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

استخدام مثال وظيفة الخريطة


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//transforms all lower case characters to upper case,
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().map(String::toUpperCase).filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

ال خريطة() تعمل الوظيفة على تحويل كائن من حالة إلى أخرى ؛ في المثال أعلاه ، يحول جميع الأحرف الصغيرة في قائمة المصفوفة إلى أحرف كبيرة.

وضع خريطة() تعمل مباشرة قبل منقي() تسترجع الدالة جميع القيم التي تبدأ بـ ج من قائمة المصفوفة.

ينتج عن الكود أعلاه النتيجة التالية في وحدة التحكم ، والتي تمثل بنجاح جميع ملفات ج القيم في قائمة الصفيف.


C11
C12
C13
C14
C15
C16

تشمل العمليات الوسيطة الثلاث الأخرى التي يمكنك استخدامها في تطبيقاتك ما يلي:

  • نظرة خاطفة ()
  • حد()
  • يتخطى()

تعمل تدفقات Java 8 على تسهيل إنشاء كود فعال

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

كيف يمكنني معرفة من يتابعني على الفيسبوك

إذا كنت تتساءل عن سطر التعليمات البرمجية المضمن في ملف منقي() وظيفة؛ يُعرف باسم 'تعبير لامدا'. تعبيرات Lambda هي ميزة أخرى مقدمة مع Java 8 ، ولديها الكثير من القطع النقدية التي قد تجدها مفيدة.

يشارك يشارك سقسقة بريد الالكتروني مقدمة سريعة إلى Java 8 Lambdas

إذا كنت مبرمج Java وكنت مهتمًا بمعرفة المزيد عن Java 8 lambdas ، في هذه المقالة سنلقي نظرة فاحصة على بناء جملة lambda واستخدامها.

اقرأ التالي
مواضيع ذات صلة
  • برمجة
  • جافا
  • دروس الترميز
نبذة عن الكاتب قاديشا كين(21 مقالة منشورة)

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

المزيد من Kadeisha Kean

اشترك في نشرتنا الإخبارية

انضم إلى النشرة الإخبارية لدينا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!

انقر هنا للاشتراك