Enforcing IF, ELSEIF e ELSE sulla raccolta di oggetti

-1

Sto progettando un progetto in cui devo applicare le condizioni IF, ELSEIF e ELSE sulla raccolta di oggetti.

Ad esempio:

public class Box {
    private List<Item> items;
}

Voglio definire IF ELSE IF , ELSE condizioni sul raggruppamento di items .

Ad esempio:
IF (X=='abc' AND Y=='jkl') ==> get items[0], items[5], items[10]
ELSE IF(X=='abc') ==> get items[7], items[3]

I valori per X e Y saranno disponibili al momento della lettura dell'oggetto.

Quindi il processo è: un modulo costruirà questo oggetto con condizioni e lo memorizzerà in DB o XML. Un altro modulo raccoglierà questi dati e agirà su di loro.

Questo è solo un esempio di ciò che ho in mente.

    
posta Kishor Prakash 09.05.2018 - 12:29
fonte

1 risposta

3

Puoi sempre iniziare con un metodo sulla classe Box:

public class Box {
    private List<Item> items;

    public filter(string x, string y) {
        List<Item> filteredItems = new List<Item>();

        if (x == 'abc' && y == 'jkl') {
            filterItems.add(items[0]);
            filterItems.add(items[5]);
            filterItems.add(items[10]);
        }
        else if (x == 'abc') {
            filterItems.add(items[7]);
            filterItems.add(items[3]);
        }
        else {
            filterItems = // copy the items field
        }

        return filterItems;
    }
}

Se ciò non è sufficiente, puoi utilizzare il Pattern di strategia per determinare la strategia di filtro in base ai valori di x e y in fase di esecuzione:

public class Box {
    private List<Item> items;

    public static BoxItemFilterStrategy getFilterStrategy(string x, string y) {
        if (x == 'abc' && y == 'jkl') {
            return new BoxItemFilterStrategy1();
        }
        else if (x == 'abc') {
            return new BoxItemFilterStrategy2();
        }

        return new DefaultBoxItemFilterStrategy();
    }

    public List<Item> filter(BoxItemFilterStrategy filterStrategy) {
        return filterStrategy.filter(items);
    }
}

public interface BoxItemFilterStrategy {
    List<Item> filter(List<item> items);
}

public class BoxItemFilterStrategy1 implements BoxItemFilterStrategy {
    public List<Item> filter(List<item> items) {
        // return items 0, 5 and 10
    }
}

public class BoxItemFilterStrategy2 implements BoxItemFilterStrategy {
    public List<Item> filter(List<item> items) {
        // return items 7 and 3
    }
}

public class DefaultBoxItemFilterStrategy implments BoxItemFilterStrategy {
    public List<Item> filter(List<item> items) {
        // return all items
    }
}

E un esempio di utilizzo:

Box box = new Box();
// add items

BoxItemFilterStrategy strategy = Box.getFilterStrategy(x, y);
List<Item> filteredItems = box.filter(strategy);

Dipende tutto dalla complessità della logica di filtraggio.

    
risposta data 09.05.2018 - 14:37
fonte

Leggi altre domande sui tag