تخطَّ إلى المحتوى

Stream API

واجهة الـ Stream Stream API

Stream تسمح بمعالجة سلسلة من العناصر بداليًا: filter و map و reduce و collect.

Stream واجهة تمثّل تدفقًا للمعالجة — لا تعدّل المصدر الأصلي. تدعم سلاسل من العمليات: تصفية (filter)، تحويل (map)، تجميع (collect)، وتقليل (reduce). تُنفَّذ كسلاسل كسولة (lazy) — لا تنفّذ إلا عند الحاجة.

الصياغة

stream.filter(pred).map(fn).collect(collector)
stream.reduce(identity, accumulator)
stream.forEach(action)
stream.sorted().distinct().count()

📄 مثال

import java.util.*;
import java.util.stream.*;

List<Integer> nums = List.of(1, 2, 3, 4, 5, 6, 7, 8);

// filter + map + collect:
List<Integer> evensSquared = nums.stream()
    .filter(n -> n % 2 == 0)
    .map(n -> n * n)
    .toList(); // [4, 16, 36, 64]

// reduce:
int sum = nums.stream()
    .reduce(0, Integer::sum); // 36

// count + sorted:
long count = nums.stream()
    .filter(n -> n > 3)
    .sorted()
    .count(); // 5

// grouping:
Map<Boolean, List<Integer>> grouped = nums.stream()
    .collect(Collectors.partitioningBy(n -> n % 2 == 0));

أهم النقاط

العنصرالوظيفة
filter(pred)يُبقي العناصر التي تحقق الشرط
map(fn)يحوّل كل عنصر
reduce(id, op)يُجمع كل العناصر لقيمة واحدة
collect(collector)يُجمع النتيجة لمجموعة
sorted()ترتيب تصاعدي
distinct()حذف المكرر
forEach(action)تنفيذ على كل عنصر
toList() / toSet()تحويل لمجموعة

💡 نصائح عملية

  • Stream كسولة — لا تنفّذ أي شيء حتى تستدعي terminal operation مثل collect أو forEach
  • toList() أبسط من collect(Collectors.toList()) — متوفرة منذ Java 16

⚠️ أخطاء شائعة

  • nxing stream() مرتين — Stream لا يمكن إعادة استخدامها
  • nxing sorted() مع map() — قد تُفقد العناصر الأصلية إذا الهدف مجموعات مختلفة

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار JAVA الكامل بالعربي.