eTerables.find و eTerators.find - بدلاً من إلقاء الاستثناء ، احصل على NULL

StackOverflow https://stackoverflow.com/questions/2543052

  •  23-09-2019
  •  | 
  •  

سؤال

أنا أستخدم جوجل توصيلات وأحاول العثور على العنصر الأول الذي يرضي المسند إن لم يكن ، أعدني "لاغية".

لسوء الحظ ، يلقي eTerables.find و iterators.find nosuchelementException عند عدم العثور على عنصر.

الآن ، أنا مجبر على القيام به

Object found = null;
if ( Iterators.any( newIterator(...) , my_predicate )
{
    found = Iterators.find( newIterator(...), my_predicate )
}

يمكنني أن أحيط بـ "Try/Catch" والقيام بنفس الشيء ولكن بالنسبة لحالات الاستخدام الخاصة بي ، سأواجه العديد من الحالات التي يتم فيها العثور على أي عنصر.

هل هناك طريقة أبسط للقيام بذلك؟

هل كانت مفيدة؟

المحلول

يبدو أنك يجب أن تستخدم التكرار.

نصائح أخرى

منذ جوافا 7 ، يمكنك القيام بذلك باستخدام الحمل الزائد لـ teerables.find () الذي يأخذ قيمة افتراضية:

Iterables.find(iterable, predicate, null);

تم تقديم هذا كطلب ميزة:

http://code.google.com/p/guava-libraries/issues/detail؟id=217

نحن في الواقع قيد التقدم في ذلك.

لست متأكدًا مما إذا كان هذا مؤهلاً أكثر بساطة ، ولكنه على الأقل يتجنب الاستثناءات ويتطلب تمريرة واحدة فقط على المصدر غير قابلة للإصابة:

public static <T> T findMatchOrNull(Iterator<T> source, Predicate<T> pred) {
    Iterator<T> matching = Iterators.filter(source, pred);
    Iterator<T> padded = Iterators.concat(matching, Iterators.<T>singletonIterator(null));
    return padded.next();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top