0Pricing
Java Academy · درس

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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. Function وBiFunction
  2. Supplier وConsumer
  3. Predicate والتركيب
  4. الواجهات الوظيفية المخصصة
← العودة إلى Java Academy