سؤال

أفضل شرح برمز أعتقد، هذا هو مجرد مثال بسيط:

public class MyPOJO {

    public String name;
    public int age;

    public MyPOJO(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class MyProcessor {

    public List<MyPOJO> process(List<MyPOJO> mypojos) {
        List<MyPOJO> temp = new ArrayList<MyPOJO>; 
        for (int i=0; i <moypojos.size(); i++) {
            if (filterOne(mypojos[i])) continue;
            if (filterTwo(mypojos[i])) continue;
            if (filterThree(mypojos[i])) continue;
            temp.add(mypojos[i];
        }
    }

    public boolean filterOne(MyPOJO mypojo) {
        // in practice filters aren't so basic
        return (mypojo.age < 21);
    }
    // assume implementations for the other filter methods
}

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

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

المحلول

يمكنك الحصول على قائمة IFilters.

مثل ذلك

boolean filtersResult = false;
for (IFilter filter : filters) {
    filterResult = filter.process(mypojos[i])

    if (filterResult)
        break;
}

نصائح أخرى

قد ترغب في تنفيذ المرشحات الخاصة بك بحيث يأخذ مجموعة، وإرجاع مجموعة مرشح:

public interface IFilter<E> {
  public Collection<E> filter(Collection<E> input);
}

بهذه الطريقة يمكنك سلسلة من المرشحات معا تافهة للغاية. الجانب السلبي هو أنه بالنسبة للمجموعات الكبيرة، فإنه أبطأ ويستغرق مساحة أكبر؛ لكن الكود هو أكثر قابلية للقراءة.

لماذا لا تستخدم الفاصولياب يمكن أن تجعل التعليمات البرمجية مقروءة.

List<MyPOJO> result=selectBean(MyPOJO.class).where(
                                                not(
                                                  anyOf(
                                                      value("aga",lessThan(21)),
                                                      value("age",greaterThan(50))
                                                  )
                                                )
                                            .executeFrom(myPojos).
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top