Domanda stupida

di il
12 risposte

Domanda stupida

Scusate il titolo ma non so formulare la domanda in poche parole. Dovrei creare un paio di array con le info che mi arrivano da un DB ( ma questo è del tutto irrilevante). Il primo dovrebbe contenere un paio di info, il secondo le stesse più un campo.

Se faccio:
    
        ArrayList<ArrayList<String>> DBStudents = new ArrayList<>();
        ArrayList<ArrayList<String>> DBStudentsWithEmail = new ArrayList<>();
        for(Student s: students) {
            ArrayList<String> a = new ArrayList<>();
            a.add(s.getFirstname());
            a.add(s.getLastname());
            DBStudents.add(a);
            a.add(s.getEmail());
            DBStudentsWithEmail.add(a)
        }
Entrambi gli array hanno esattamente gli stessi campi . C'e' una soluzione più elegante di questa?
  ArrayList<ArrayList<String>> DBStudents = new ArrayList<>();
        ArrayList<ArrayList<String>> DBStudentsWithEmail = new ArrayList<>();
        for(Student s: students) {
            ArrayList<String> a = new ArrayList<>();
            ArrayList<String> b = new ArrayList<>();
            a.add(s.getFirstname());
            b.add(s.getFirstname());
            a.add(s.getLastname());
            b.add(s.getLastname());
            DBStudents.add(a);
            b.add(s.getEmail());
            DBStudentsWithEmail.add(b);
        }
Sono fuso e al momento proprio non mi viene niente (ma anche questo è irrilevante ).

12 Risposte

  • Re: Domanda stupida

    Ma fino allla riga in cui aggiungi l'email, a e b sono la uguali. Quindi volendo puoi creare solo a, riempirlo, dopo creare b e dire che a è uguale a b e dopo aggiungere l'email solo a b.

    Postmetto che è un codice un po' strano, visto che nell'array ci sono stringhe senza modo di sapere se dentro ciascuna di esse ci sia un nome o un cognome o una email; però se è quello che ti serve è ok
  • Re: Domanda stupida

    In effetti il giochetto di assegnare a a b risparmia un paio di righe.

    Nelle stringhe c'è sicuramente qualcosa. Non c'è bisogno di alcun controllo.
  • Re: Domanda stupida

    Ma se usi un solo ArrayList, poi se ti serve o meno prendi la mail?
  • Re: Domanda stupida

    golosauro ha scritto:


    Postmetto che è un codice un po' strano, visto che nell'array ci sono stringhe senza modo di sapere se dentro ciascuna di esse ci sia un nome o un cognome o una email; però se è quello che ti serve è ok
    butti tutto dentro al calderone dell'array, supponendo che hai 3 utenti Studenti registrati, come tiri fuori le informazioni che ti servono esattamente? solo per curiosità.
  • Re: Domanda stupida

    MarkRider ha scritto:



    butti tutto dentro al calderone dell'array, supponendo che hai 3 utenti Studenti registrati, come tiri fuori le informazioni che ti servono esattamente? solo per curiosità.
    In realtà mi servono un paio di array, uno viene riempito dal DB (Mongo) l'altro da un file csv che uso per sapere quali utenti del dB non sono presenti nel csv e viceversa. Nel controllo mi servono solo nome e cognome. Mentre nella successiva visualizzazione su web mi occorre anche la mail.

    Per questo non posso usare lo stesso array, perché uno studente può avere mail differenti o non averla proprio e questo inficierebbe il controllo che mi serve.
  • Re: Domanda stupida

    Credo che il punto sia, per come ti accennavo io e per quello che ha scritto MarkRider, che se metti i dati in un array di stringhe poi è difficile andarli a riprendere.
    A meno di utilizzi specifici che ora non mi vengono in mente, non sarebbe meglio usare una classe più strutturata, avente campi "nome", "cognome" ed "email" e riempire oggetti di questo tipo in modo che dall'oggetto tu possa prendere es il nome facendo getNome() ?
    Altrimenti se hai un array contenente {Paolo, Rossi, } e vuoi il cognome, come lo prendi?
  • Re: Domanda stupida

    MarkRider ha scritto:


    golosauro ha scritto:


    Postmetto che è un codice un po' strano, visto che nell'array ci sono stringhe senza modo di sapere se dentro ciascuna di esse ci sia un nome o un cognome o una email; però se è quello che ti serve è ok
    butti tutto dentro al calderone dell'array, supponendo che hai 3 utenti Studenti registrati, come tiri fuori le informazioni che ti servono esattamente? solo per curiosità.
    concordo... infatti era questa la mia perplessità... ma è anche vero che non so che ci deve fare con quei dati
  • Re: Domanda stupida

    Come accennato i dati mi servono per sapere cosa c'e' nel DB che non c'e' nel CSV e viceversa. Per farlo utilizzo questi due metodi:
    
       private ArrayList<ArrayList<String>> common(ArrayList<ArrayList<String>> array1, ArrayList<ArrayList<String>> array2) {
            ArrayList<ArrayList<String>> temp1 = new ArrayList<ArrayList<String>>(array1);
            ArrayList<ArrayList<String>> temp2 = new ArrayList<ArrayList<String>>(array2);
            temp1.retainAll(new  HashSet<ArrayList<String>>(temp2));
            return temp1;
        }
    
        private ArrayList<ArrayList<String>> unCommon(ArrayList<ArrayList<String>> array1, ArrayList<ArrayList<String>> array2) {
            //array1.addAll(new  HashSet<ArrayList<String>>(array2));
            ArrayList<ArrayList<String>> temp1 = new ArrayList<ArrayList<String>>(array2);
            ArrayList<ArrayList<String>> temp2 = new ArrayList<ArrayList<String>>(array1);
            temp1.removeAll(new HashSet<ArrayList<String>>(temp2));
            return temp1;
        }
    Per ottenere le info in altri casi utilizzo i metodi (getFirstname, getLastname, ecc.) dei repository. Per le pagine web, posso tranquillamente usare gli array prodotti nel ciclo di cui chiedevo lumi, che tanto faccio un ciclo sugli elementi e li visualizzo.
  • Re: Domanda stupida

    A parte che mi sfugge l'utitlità di crearti quei temp2 visto che array2 non lo modificheresti comunque. A parte questo, ma se tipo in una lista c'è un tizio che si chiama di nome Piero e nell'altra uno che si chiama Piero di cognome, il tuo codice funziona? Oppure se ci sono due che si chiamano Piero in una lista e uno solo nell'altra
  • Re: Domanda stupida

    golosauro ha scritto:


    A parte che mi sfugge l'utitlità di crearti quei temp2 visto che array2 non lo modificheresti comunque. A parte questo, ma se tipo in una lista c'è un tizio che si chiama di nome Piero e nell'altra uno che si chiama Piero di cognome, il tuo codice funziona? Oppure se ci sono due che si chiamano Piero in una lista e uno solo nell'altra
    Non ero sicuro che venissero mantenuti gli array originali. I metodi funzionano, per lo meno per quello che mi serve mi restituiscono correttamente le differenze tra i due array.
  • Re: Domanda stupida

    Ho capito forse, tu stai comparando quello che hai nel file con quello che hai nel DB. Giusto?

    Penso che nel tuo caso sia da rivedere un attimo la progettazione di quello che vuoi fare.
    Il csv sarebbe un fantomatico backup?
  • Re: Domanda stupida

    MarkRider ha scritto:


    Ho capito forse, tu stai comparando quello che hai nel file con quello che hai nel DB. Giusto?
    Esatto.
    Penso che nel tuo caso sia da rivedere un attimo la progettazione di quello che vuoi fare.
    Il csv sarebbe un fantomatico backup?
    No, diciamo che il programma gestisce gli studenti di un laboratorio di chimica. Questi studenti vengono inseriti una prima volta dalle liste di iscritti al corso. In seguito l'Università invia un file CSV con gli studenti che a loro risultano realmente iscritto al corso. A questo punto entra in ballo quello in oggetto. Ora ho parzialmente risolto dato che la lista di studenti non presenti nel DB la ottengo direttamente con query. La seconda utilizzando il metodo unCommon.
Devi accedere o registrarti per scrivere nel forum
12 risposte