logo

AnyMatch() في جافا 8

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

في Java 8 Stream، يتم تقسيم عمليات الدفق إلى متوسط (مثل Stream.filter، Stream.map) و صالة (مثل Stream.forEach، Steam.reduce). للحصول على النتائج المرجوة، نحتاج إلى الجمع بين هذه العمليات التي تشكل خطوط أنابيب التدفق.

العمليات الوسيطة

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

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

عملية عديمة الجنسية

لا تحتفظ العمليات عديمة الحالة بالحالة من العناصر التي سبق رؤيتها أثناء معالجة عنصر جديد. يمكن معالجة كل عنصر بشكل مستقل عن العمليات على العناصر الأخرى.

عملية الدولة

تحتفظ العمليات ذات الحالة بالحالة من العناصر التي تمت رؤيتها سابقًا أثناء معالجة العناصر الجديدة. خاصية العملية ذات الحالة هي أنها تعالج المدخلات بالكامل قبل إنتاج النتيجة.

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

التشغيل الطرفي

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

string.replaceall جافا

تقريبًا جميع العمليات الطرفية حريصة بطبيعتها. وهذا يعني أنهم يجتازون التيار ويعالجون خط الأنابيب قبل العودة. لاحظ أنه غير مسموح به في العمليات ذات المحطتين، أي iterator() وspliterator().

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

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

أ عملية المحطة يحدث قصر في الدائرة إذا كان هناك تيار ذو مدخلات لا نهائية. وقد تنتهي في وقت محدد.

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

جافا 8 Stream.anyMatch()

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

بناء الجملة:

 boolean anyMatch(Predicate predicate) 

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

عائدات: يعود حقيقي إذا كان أي عنصر يطابق المسند المحدد، وإلا فسيتم إرجاع خطأ. إرجاع خطأ إذا كان الدفق فارغًا. في حالة وجود دفق فارغ، لا يتم تقييم المسند.

عقدة قائمة جافا

جافا AnyMatch() مثال

AnyMatchExample1.java

 import java.util.stream.Stream; public class AnyMatchExample1 { public static void main(String args[]) { Stream stream = Stream.of('Java', 'Python', 'Hadoop', 'C#', 'C++', 'Kotlin'); boolean match = stream.anyMatch(s -> s.contains('Python')); System.out.println(match); } } 

انتاج:

 true 

يصور المثال التالي دفقًا فارغًا يُرجع دائمًا خطأ.

AnyMatchExample2.java

أوامر لينكس
 import java.util.Arrays; public class AnyMatchExample2 { public static void main(String args[]) { boolean b = Arrays.asList().stream().anyMatch(e -> true); System.out.println(b); } } 

انتاج:

 false 

دعونا نرى برنامج Java آخر قمنا فيه بتحليل مسندات متعددة.

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

AnyMatchExample.java

 import java.util.List; import java.util.function.Predicate; import java.util.ArrayList; class Employee { int empId; int empAge; String empName; //creating a constructor of the Employee class Employee(int id, int age, String name) { this.empId = id; this.empAge = age; this.empName = name; } public int getEmpId() { return empId; } public int getEmpAge() { return empAge; } public String getEmpName() { return empName; } public static List getEmployee() { //instance of the List class List list = new ArrayList(); //adding elements to the List list.add(new Employee(21, 21, &apos;Andrew&apos;)); list.add(new Employee(23, 28, &apos;Robert&apos;)); list.add(new Employee(32, 29, &apos;Jack&apos;)); list.add(new Employee(12, 31, &apos;Steve&apos;)); list.add(new Employee(15, 27, &apos;Tom&apos;)); list.add(new Employee(19, 29, &apos;Albert&apos;)); return list; } } //driver code public class AnyMatchExample { public static void main(String args[]) { //defining predicates Predicate p1 = e -&gt; e.empName.startsWith(&apos;S&apos;); Predicate p2 = e -&gt; e.empAge <28 && e.empname.startswith('r'); predicate p3="e" -> e.empName.startsWith(&apos;P&apos;); List list = Employee.getEmployee(); //anyMatch() method checks whether any Stream element matches the specified predicate boolean bool1 = list.stream().anyMatch(p1); //prints true if any element of the List starts with the letter s, else prints false System.out.println(bool1); boolean bool2 = list.stream().anyMatch(p2); //prints true if any element of the List starts with the letter z and age is less than 28, else prints false System.out.println(bool2); //anyMatch() method checks whether any Stream element matches the specified predicate boolean bool3 = list.stream().anyMatch(p3); //prints true if any element of the List starts with the letter P, else prints false System.out.println(bool3); } } </28>

انتاج:

 true true false 

توفر واجهة الدفق طريقة أخرى لمطابقة المسند المحدد، أي. الكل ماتش () . الفرق بين allMatch() و AnyMatch() هو أن AnyMatch() يُرجع حقيقي إذا كان أي من العناصر الموجودة في الدفق يتطابق مع المسند المحدد. عند استخدام allMatch()، يجب أن تتطابق جميع العناصر مع المسند المحدد.

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

ومن ثم، لا يوجد فرق بين أسلوب List.contains() وStream.anyMatch().