لديك قائمة فارغة من الأعداد الصحيحة وتريد ملء هذه القائمة بخاصية “marker” من قائمة من الكائنات، ثم الحصول على أعلى قيمة للعلامة “marker”. يمكنك تحقيق هذا باستخدام Java 8 Streams والتلاعب بالبيانات بطريقة أكثر فعالية. إليك كيفية القيام بذلك:
java// ملء القائمة reservedMarkers بقيم "marker" من قائمة scheduleIntervalContainers
scheduleIntervalContainers.stream()
.map(ScheduleIntervalContainer::getMarker) // استخراج العلامة "marker" من كل كائن
.forEach(reservedMarkers::add); // إضافة العلامة إلى القائمة reservedMarkers
// الحصول على أعلى قيمة للعلامة "marker" من القائمة reservedMarkers
OptionalInt maxMarker = reservedMarkers.stream()
.mapToInt(Integer::intValue) // تحويل القيم Integer إلى قيم int
.max(); // الحصول على أعلى قيمة
// التحقق مما إذا كانت القائمة غير فارغة والحصول على أعلى قيمة، أو الحصول على قيمة افتراضية إذا كانت القائمة فارغة
int highestMarker = maxMarker.orElse(0);
بهذه الطريقة، يتم استخراج قيم “marker” من كل كائن في قائمة scheduleIntervalContainers
ووضعها في القائمة reservedMarkers
. ثم يتم استخدام Stream آخر للحصول على أعلى قيمة من القائمة reservedMarkers
.
المزيد من المعلومات
بالطبع! في هذا السياق، يُفضل استخدام mapToInt
بدلاً من map
لتحويل القيم Integer
إلى int
مباشرةً. هذا يقلل من الحاجة إلى تحويل الأنواع الضرورية في كل مرة تقوم فيها بالعمليات الحسابية، مما يجعل الكود أكثر فعالية من حيث الأداء.
وفيما يتعلق بالحصول على أعلى قيمة في القائمة reservedMarkers
، يمكنك أيضًا استخدام الطريقة reduce
بدلاً من max
، وذلك كما يلي:
java// الحصول على أعلى قيمة للعلامة "marker" من القائمة reservedMarkers
int highestMarker = reservedMarkers.stream()
.mapToInt(Integer::intValue) // تحويل القيم Integer إلى قيم int
.reduce(Integer.MIN_VALUE, Integer::max); // الحصول على أعلى قيمة
تعتبر هذه الطريقة أقل تعقيدًا وتوفيرًا للوقت، حيث تحصل على أعلى قيمة مباشرة دون الحاجة إلى فرز القائمة أولاً.