Domanda Filtrare posti di un volo con java tramite un filtro

jr_sottomajor

Utente Silver
2 Luglio 2017
96
33
4
79
Ciao a tutti avrei bisogno di un piccolo aiuto riguardo un esercizio di java, la traccia è la seguente:
domanda.png


Il problema che mi si pone è al punto 2 dove devo implementare il metodo filtraPosti mediante un filtro sugli stessi.. La classe Filter l'ho fatta cosi:
Java:
public class Filter {
    public Filter(int numero) {
        this.numero=numero;
    }
    public Filter (char lettera) {
        this.lettera=lettera;
    }
    public Filter(boolean stato) {
        this.stato=stato;
    }
    public Filter(int numero,char lettera) {
        this.numero=numero;
        this.lettera=lettera;
    }
    public Filter(int numero, boolean stato) {
        this.numero=numero;
        this.stato=stato;
    }
    public Filter(char lettera,boolean stato) {
        this.lettera=lettera;
        this.stato=stato;
    }
    public Filter(int numero, char lettera, boolean stato) {
        this.numero=numero;
        this.lettera=lettera;
        this.stato=stato;
    }
    public int getNumero() {
        return numero;
    }
    public void setNumero(int numero) {
        this.numero = numero;
    }
    public char getLettera() {
        return lettera;
    }
    public void setLettera(char lettera) {
        this.lettera = lettera;
    }
    public boolean isStato() {
        return stato;
    }
    public void setStato(boolean stato) {
        this.stato = stato;
    }
    
    
    //var istanza
    private int numero;
    private char lettera;
    private boolean stato;

Non ho ben chiaro in testa se sto seguendo la strada giusta o se mi sto complicando solo la vita. Come potrei implementare il metodo filtraPosti a questo punto? Tramite mappa chiave-valore? O usando gli stream e le espressioni lambda? Grazie in anticipo
 
Usare le lambda expressions e gli stream è la cosa migliore che puoi fare... un po' come implementare implementare un algoritmo di ordinamento usando sort() della libreria standard è la cosa migliore che puoi fare. Dovresti cercare di capire se ti è concesso farlo, perché a quel punto l'unica utilità di Filter e filtraPosti è quella di dare un nome diverso a qualcosa che esiste già (e.g., implementa il metodo "ordina" e al suo interno scrivi "sort").
Quello è il testo completo dell'esercizio? Perché visto così mi sembra che il punto 2 lo puoi fare complicato a piacere.


Tramite mappa chiave-valore?
Non ho capito l'idea che hai in mente.
 
Si diciamo che è molto "largo" come esercizio, il testo rimanente lo posto ora:
2 parte.png

3 parte.png


La seconda parte l'ho gia fatta, la prima parte manca solo quel metodo con filtro.. Poi la terza gioca sulla parte grafica, eventi eccetera.. Diciamo che le espressioni lambda a livello di corso sono state spiegate in maniera piuttosto concettuale, per questo ho postato la domanda. Sicuramente sarebbe la strada migliore usarle, ma nel caso volessi risolverlo diversamente?
 
Sicuramente sarebbe la strada migliore usarle, ma nel caso volessi risolverlo diversamente?
  • Filter lo puoi implementare come un'interfaccia con un unico metodo che prende un Posto (e.g., "pass") e restitiusce un booleano (true se passa e false se viene filtrato);
  • il metodo filtraPosti è semplicemente un ciclo for che usa f.pass(i) per capire se i è o non è da aggiungere all'ArrayList restituito;
  • tra le implementazioni di Filter hai FilterEquals e FilterGratherThan che sono dei mini builder per le inner-classes FilterStateEquals, FilterRowEquals, FilterPositionEquals, FilterRowGratherThan e FilterPositionGratherThan;
  • hai un FilterBuilder che combina due Filter in un unico Filter con and e or oppure applica not ad un unico Filter.
Se vuoi filtrare i posti liberi tra la seconda e la sesta fila la cui posizione è strettamente inferiore ad H, lo fai sfruttando quelle poche classi che hai creato. Forse è più complicato di quello che si aspetta il tuo professore, ma è un meccanismo molto versatile e il codice è relativamente corto.

Se ti sembra troppo complicato, spiegami in modo più o meno dettagliato cosa vuoi ottenere e io ti spiego come farlo. Se non ti metti ad usare le lambda, il punto 2 mi sembra un po' a libera interpretazione per quanto in la puoi spingerti. Io ti ho spiegato come strutturare una versione abbastanza completa dei filtri, ma magari tu ti accontenti ti molto meno.
 
Innanzitutto ti ringrazio per le risposte e la tua disponibilità. Diciamo che devo un attimo rivedermi le espressioni lambda e magari provo a risolvere da solo.. Avrei un'altra domanda inerente ad un altro esercizio però.. creo una nuova discussione o posto magari qui? (sempre se per te non è un problema aiutarmi :D)
 
Con le lambda, le functional interfaces e gli stream si fa in 1 riga di codice anche senza definire alcuna classe e senza implementare alcun metodo. È per questo che leggendo "crea la classe Filter" e "implementa il metodo filtraPosti" mi sono insospettito e volevo vedere anche il resto dell'esercizio per capire se servissero ad altro.

creo una nuova discussione o posto magari qui?
Se pensi di avere altre domande su questo esercizio, mi sa che ti conviene tenere la discussione pulita e crearne una nuova. Fai un po' tu...