Predicate والتركيب
تركيب اختبارات منطقية
Predicate والتركيب درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.
ما الذي يفعله Predicate
تستقبل Predicate<T> قيمة وتُرجع قيمة boolean.
- دالتها هي
boolean test(T t). - وهي تمثّل شرطًا إجابته نعم أو لا.
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
Predicate<Integer> isEven = n -> n % 2 == 0;
System.out.println(isEven.test(4));
System.out.println(isEven.test(5));
}
}استخدام Predicate في filter
تستقبل Stream.filter قيمة Predicate وتُبقي على العناصر المطابقة فقط.
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> nums = List.of(1, 2, 3, 4, 5, 6);
List<Integer> evens = nums.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(evens);
}
}الدمج باستخدام and
تنشئ and مسندًا تكون نتيجته صحيحة فقط عندما ينجح كلا المسندين.
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
Predicate<Integer> positive = n -> n > 0;
Predicate<Integer> even = n -> n % 2 == 0;
Predicate<Integer> both = positive.and(even);
System.out.println(both.test(4));
System.out.println(both.test(-2));
}
}الدمج باستخدام or
تُرجع or قيمة صحيحة عندما ينجح مسند واحد على الأقل.
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
Predicate<String> empty = String::isEmpty;
Predicate<String> shortStr = s -> s.length() < 3;
Predicate<String> either = empty.or(shortStr);
System.out.println(either.test(""));
System.out.println(either.test("hi"));
System.out.println(either.test("hello"));
}
}النفي باستخدام negate
تعكس negate نتيجة المسند، فتمنحكم النفي المنطقي NOT.
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
Predicate<Integer> even = n -> n % 2 == 0;
Predicate<Integer> odd = even.negate();
System.out.println(odd.test(3));
}
}المساعد الساكن Predicate.not
تُعد Predicate.not(p) طريقة ساكنة واضحة للنفي، لا سيما مع مراجع الدوال.
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> words = List.of("", "a", "", "bc");
List<String> nonEmpty = words.stream()
.filter(Predicate.not(String::isEmpty))
.collect(Collectors.toList());
System.out.println(nonEmpty);
}
}Predicate.isEqual
تنشئ Predicate.isEqual(target) مسندًا يختبر التساوي مع قيمة ثابتة باستخدام Objects.equals.
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
Predicate<String> isJava = Predicate.isEqual("java");
System.out.println(isJava.test("java"));
System.out.println(isJava.test("python"));
}
}ربط شروط متعددة
يمكنكم ربط and وor وnegate للتعبير عن قواعد متقدمة. استخدموا الأقواس للتحكم في التجميع.
import java.util.function.Predicate;
public class Main {
public static void main(String[] args) {
Predicate<Integer> big = n -> n > 100;
Predicate<Integer> even = n -> n % 2 == 0;
Predicate<Integer> rule = big.and(even).or(n -> n == 0);
System.out.println(rule.test(0));
System.out.println(rule.test(102));
System.out.println(rule.test(101));
}
}BiPredicate لمدخلين
تختبر BiPredicate<T, U> معاملين، كما تدعم and وor وnegate.
import java.util.function.BiPredicate;
public class Main {
public static void main(String[] args) {
BiPredicate<String, Integer> hasLength = (s, n) -> s.length() == n;
System.out.println(hasLength.test("hello", 5));
}
}المسندات في anyMatch
تستقبل العمليات النهائية للتدفقات، مثل anyMatch وallMatch وnoneMatch، قيمة Predicate.
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> nums = List.of(1, 3, 5, 8);
System.out.println(nums.stream().anyMatch(n -> n % 2 == 0));
System.out.println(nums.stream().allMatch(n -> n > 0));
}
}ثوابت Predicate القابلة لإعادة الاستخدام
يجعل تعريف المسندات كمتغيرات مُسمّاة مسارات التصفية موضّحةً لذاتها وقابلةً لإعادة الاستخدام.
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
Predicate<String> nonBlank = s -> !s.isBlank();
List<String> input = List.of("a", " ", "", "b");
System.out.println(input.stream().filter(nonBlank).collect(Collectors.toList()));
}
}تحقّق سريع
ماذا ينتج p.and(q)؟
مراجعة
لقد ركّبتم اختبارات منطقية:
- تستخدم
Predicate<T>الدالةtestلإرجاع قيمة منطقية. - تجمع
andوorوnegateالشروط مع إيقاف التنفيذ مبكرًا. - يُعد
Predicate.notوPredicate.isEqualمن المساعدات الساكنة المفيدة. - يختبر
BiPredicateمدخلين.
الأسئلة الشائعة
هل درس «Predicate والتركيب» مجاني؟
نعم — نص درس «Predicate والتركيب» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.
ماذا ستتعلم في «Predicate والتركيب»؟
تركيب اختبارات منطقية تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟
لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «Predicate والتركيب»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟
نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Function وBiFunction
- Supplier وConsumer
- Predicate والتركيب
- الواجهات الوظيفية المخصصة