96 lines
3.7 KiB
Markdown
96 lines
3.7 KiB
Markdown
---
|
|
title: Streams
|
|
localeTitle: تيارات
|
|
---
|
|
# تيارات
|
|
|
|
في Java 8 Streams تمت إضافتها كميزة جديدة في مربع أدوات Java. تتيح لك مجموعات البث معالجة المجموعات بسرعة وسهولة.
|
|
|
|
يرجى قراءة الفصل حول lambdas والبرمجة الوظيفية قبل المتابعة.
|
|
|
|
## كيف تعمل
|
|
|
|
يقوم الدفق بتكرار عناصر المجموعة لك. يتم استدعاء كل عملية وسيطة وعملية لكل كائن. بمجرد الانتهاء من جميع العمليات للكائنات الأولى ، ثم يتم تحميل الكائن الثاني.
|
|
|
|
## طرق مهمة
|
|
|
|
### خلق
|
|
|
|
* `Collection.stream()` : إنشاء دفق من أي كائن من أي فئة تنفيذ `Collection`
|
|
* `Arrays.stream(array)` : إنشاء دفق من صفيف
|
|
|
|
### العمليات الوسيطة
|
|
|
|
هذه العمليات تحويل "كائنات دفق" بطريقة أو بأخرى.
|
|
|
|
* `Stream.map(Function<In,Out> function)` : تطبيق وظيفة لتحويل In إلى Out
|
|
* `Stream.filter(Predicate<In> predicate)` : إزالة كائنات من Stream التي لا `Stream.filter(Predicate<In> predicate)` true
|
|
* `Stream.distinct()` : إزالة كائنات من دفق والتي هي مكررة
|
|
* `Stream.sorted()` : فرز الكائنات في الدفق
|
|
* `Stream.limit(int n)` : end Stream after n Objects
|
|
|
|
### العمليات الطرفية
|
|
|
|
هذه العمليات تلقي "كائنات دفق" وإنهاء "دفق".
|
|
|
|
* `Stream.collect(Collector<In,?,Out> collector)` : جمع كافة الكائنات في دفق في كائن
|
|
* `Stream.forEach(Consumer<In> consumer)` : تستهلك كافة الكائنات في دفق باستخدام الدالة المستهلك
|
|
* `Stream.count()` : حساب كافة الكائنات في دفق
|
|
* `Stream.findFirst()` : إرجاع الكائن الأول من الدفق وإيقاف
|
|
* `Stream.anyMatch(Predicate<In> predicate)` : إرجاع true إذا كان أي كائن في Stream اختبارات true لـ Predicate
|
|
* `Stream.allMatch(Predicate<In> predicate)` : إرجاع true إذا كان كل كائن في اختبار Stream صحيح لـ Predicate
|
|
|
|
## أمثلة
|
|
|
|
`// print the length of all Strings in a List
|
|
for (String string : Arrays.asList("abc", "de", "f", "abc")) {
|
|
int length = string.length();
|
|
System.out.println(length);
|
|
}
|
|
|
|
Arrays.asList("abc", "de", "f", "abc")
|
|
.stream()
|
|
.map(String::length)
|
|
.forEach(System.out::println);
|
|
|
|
// output: 3 2 1 3
|
|
`
|
|
|
|
`// print all Strings in a List with a Length greater than 2
|
|
for (String string : Arrays.asList("abc", "de", "f", "abc")) {
|
|
if (string.length() > 2) {
|
|
System.out.println(string);
|
|
}
|
|
}
|
|
|
|
Arrays.asList("abc", "de", "f", "abc")
|
|
.stream()
|
|
.filter(string -> string.length() > 2)
|
|
.forEach(System.out::println);
|
|
|
|
// output: abc abc
|
|
`
|
|
|
|
`// create a sorted List with all unique Strings from another List which are longer than or requal 2
|
|
List<String> result = new ArrayList<>();
|
|
for (String string : Arrays.asList("de", "abc", "f", "abc")) {
|
|
if (string.length() >= 2
|
|
&& ! result.contains(string)) {
|
|
result.add(string);
|
|
}
|
|
}
|
|
Collections.sort(result);
|
|
|
|
List<String> result2 = Arrays.asList("de", "abc", "f", "abc")
|
|
.stream()
|
|
.filter(string -> string.length() >= 2)
|
|
.distinct()
|
|
.sorted()
|
|
.collect(Collectors.toList());
|
|
|
|
// result: abc de
|
|
`
|
|
|
|
### مصادر
|
|
|
|
1. [معالجة البيانات باستخدام Java SE 8 Stream ، الجزء الأول](http://www.oracle.com/technetwork/articles/java/ma14-java-se-8-streams-2177646.html) |