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

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

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

ما هو تيار؟

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

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

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

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

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

instagram viewer
لكل ()) ، والتي ستنتج البيانات المستخرجة مسبقًا من المصدر.

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

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

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

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

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


استيراد java.util. قائمة الصفيف
استيراد java.util. صفائف.
استيراد java.util. قائمة؛
فئة عامة رئيسية {
العامة الثابتة الفراغ الرئيسي (سلسلة [] args) {
// يعلن وتهيئة قائمة المصفوفات
قائمة 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"
);
// أعلن أن قائمة المصفوفة ستخزن القيم المطلوبة
قائمة requiredValues ​​= new ArrayList <> ()؛
// استخراج القيم المطلوبة وتخزينها في القيم المطلوبة
randomValues.forEach (القيمة -> {
إذا (value.startsWith ("C")) {
requiredValues.add (القيمة) ؛
}
});
// فرز القيم المطلوبة بترتيب تصاعدي
requiredValues.sort ((String value1، String value2) -> value1.compareTo (value2)) ؛
// طباعة كل قيمة على وحدة التحكم
requiredValues.forEach ((قيمة السلسلة) -> System.out.println (القيمة)) ؛
}
}

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

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

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


ج 11
ج 12
ج 13
ج 14
ج 15
C16

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

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

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

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


استيراد java.util. صفائف.
استيراد java.util. قائمة؛
فئة عامة رئيسية {
العامة الثابتة الفراغ الرئيسي (سلسلة [] args) {
// يعلن وتهيئة قائمة المصفوفات
قائمة 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"
);
// يسترد فقط القيم التي تبدأ بـ C ، وفرزها ، وطباعتها على وحدة التحكم.
randomValues.stream (). filter (value-> value.startsWith ("C")). Sorted (). forEach (System.out:: println)؛
}
}

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

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

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


ج 11
ج 12
ج 13
ج 14
ج 15
C16

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

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

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

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

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


استيراد java.util. صفائف.
استيراد java.util. قائمة؛
فئة عامة رئيسية {
العامة الثابتة الفراغ الرئيسي (سلسلة [] args) {
// يعلن وتهيئة قائمة المصفوفات
قائمة 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"
);
// يسترد فقط القيم التي تبدأ بـ C ، وفرزها ، وطباعتها على وحدة التحكم.
randomValues.stream (). filter (value-> value.startsWith ("C")). Sorted (). forEach (System.out:: println)؛
}
}

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


ج 11
ج 12
ج 14
ج 15

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

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


استيراد java.util. صفائف.
استيراد java.util. قائمة؛
فئة عامة رئيسية {
العامة الثابتة الفراغ الرئيسي (سلسلة [] args) {
// يعلن وتهيئة قائمة المصفوفات
قائمة 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"
);
// يحول جميع الأحرف الصغيرة إلى أحرف كبيرة ،
// يسترد فقط القيم التي تبدأ بـ C ، وفرزها ، وطباعتها على وحدة التحكم.
randomValues.stream (). map (String:: toUpperCase) .filter (value-> value.startsWith ("C")). Sorted (). forEach (System.out:: println) ؛
}
}

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

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

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


ج 11
ج 12
ج 13
ج 14
ج 15
C16

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

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

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

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

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

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

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

اقرأ التالي

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

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

المزيد من Kadeisha Kean

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

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

خطوة أخرى أيضا…!

يرجى تأكيد عنوان بريدك الإلكتروني في البريد الإلكتروني الذي أرسلناه لك للتو.

.