في هذا المنشور سنرى كيفية استخدام Java Streams API لحساب الحد الأقصى والحد الأدنى لمجموعة من العناصر. للقيام بذلك، سنستخدم أساليب max() وmin() لفئة Stream. تتيح لنا هذه الطرق الحصول على الحد الأقصى والحد الأدنى من مجموعة العناصر، على التوالي، باستخدام مقارن مخصص.
لنفترض أن لدينا قائمة من النوع List
public record Exam(String name, Double grade) { }
var exams = Arrays.asList( new Exam("Alice", 9.5), new Exam("Bob", 6.0), new Exam("Charlie", 7.5), new Exam("David", 8.0), new Exam("Eve", 8.5) );
في الإصدارات الأخيرة من Java، يمكنك استخدام أساليب max() وmin() لفئة Stream لهذا الغرض عن طريق تمرير مقارنة مخصصة والحصول على اختياري
لنبدأ بإنشاء مقارنة مخصصة من النوع Comparator
ComparatorbyGradeAsc = (e1, e2) -> (int) (e1.grade() - e2.grade());
على سبيل المثال، سترجع هذه المقارنة رقمًا سالبًا إذا كانت درجة الاختبار الأول أقل من درجة الاختبار الثاني، وصفرًا إذا كانا متساويين، وعددًا موجبًا إذا كانت درجة الاختبار الأول أكبر من درجة الامتحان والثاني، لمزيد من المعلومات يمكنك الرجوع إلى هذا الرابط لمنشور يشرح كيفية عمل واجهة المقارنة.
يمكن تعريف هذه المقارنة بطريقة أخرى باستخدام طريقة المقارنةDouble() لفئة المقارنة والتي تسمح لنا بإنشاء مقارنة من دالة تستخرج قيمة مزدوجة من كائن دون الحاجة إلى كتابة المقارنة يدويًا.
ComparatorbyGradeAscClean = Comparator.comparingDouble(Exam::grade);
في هذا التعريف يُقال للمقارن أنه يجب أن يأخذ كائنًا من النوع Exam، ويستخرج قيمة خاصية الدرجة ويقارن القيم باستخدام نوع بيانات مزدوج.
هاتان الطريقتان متكافئتان ويمكن استخدامهما بالتبادل، قد يكون فهم الثانية أكثر صعوبة في البداية، ولكن بمجرد فهمها تصبح الكتابة والقراءة أسهل.
الآن بعد أن حصلت على المقارنة، كل ما تبقى هو استخدامها في طريقتي max() وmin() للحصول على الاختبار بأعلى وأدنى درجة، على التوالي.
var highestGrade = exams.stream().max(byGradeAscClean); var lowestGrade = exams.stream().min(byGradeAscClean);
في هذه الحالة، يتم الحصول على اختياري مع الاختبار الذي حصل على أعلى وأدنى درجة، على التوالي. في حالة كون قائمة الاختبارات فارغة، فسيتم إرجاع الاختياري ()Optional.empty. للحصول على قيمة الاختياري، يمكنك استخدام طريقة ifPresent() التي تستقبل المستهلك وتنفذ التعليمات البرمجية التي تم تمريرها إليه كوسيطة في حالة وجود قيمة.
highestGrade.ifPresent(ex -> System.out.println("Highest grade: " ex.name() " " ex.grade())); lowestGrade.ifPresent(ex -> System.out.println("Lowest grade: " ex.name() " " ex.grade())); // Output Highest grade: Alice 9.5 Lowest grade: Bob 6.0
أو ببساطة قم بتمرير طريقة مرجعية كوسيطة لطباعة قيمة الاختياري، إذا كان الاختياري فارغًا فلن تتم طباعة أي شيء، وإلا ستتم طباعة قيمة الاختياري عن طريق استدعاء طريقة toString () لكائن الاختبار
.
highestGrade.ifPresent(System.out::println); lowestGrade.ifPresent(System.out::println); // Output Exam[name=Alice, grade=9.5] Exam[name=Bob, grade=6.0]
هنا، بهذه الطريقة يمكنك الحصول على الحد الأقصى والحد الأدنى من مجموعة العناصر باستخدام Java Streams API وواجهة المقارنة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3