Pregunta

explica mejor con el código de pienso, esto es sólo un ejemplo sencillo:

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
}

Huy eso es feo. Básicamente tengo una colección y me gusta pasarla por un tamiz de clases sólo para continuar el procesamiento de los objetos que cumplen un cierto criterio. Mi conjetura es que hay una mejor patrón para esto que un montón de métodos que devuelven valores booleanos.

¿Fue útil?

Solución

Puede tener lista de IFilters.

así como

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

    if (filterResult)
        break;
}

Otros consejos

Es posible que desee aplicar los filtros de tal manera que ellos toman una colección, y devolver una colección filtrada:

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

De esta manera se pueden encadenar juntos filtra muy trivial. La desventaja es que para las grandes colecciones es más lento y requiere más espacio; pero el código es mucho más fácil de leer.

¿Por qué no usar frijol en consultas ? que puede hacer que el código legible.

List<MyPOJO> result=selectBean(MyPOJO.class).where(
                                                not(
                                                  anyOf(
                                                      value("aga",lessThan(21)),
                                                      value("age",greaterThan(50))
                                                  )
                                                )
                                            .executeFrom(myPojos).
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top