Visualizzazione dei risultati da 1 a 4 su 4

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442

    Confrontare due ArrayList

    Non riesco a capire come impostare un metodo, mi aiutate?
    Ho un oggetto asta che mantiene un arrayList di id di offerte che la riguardano.
    L'oggetto offerta mantiene un arrayList di id (in questo caso string) di utenti che hanno inserito un'offerta. Questi id sono univoci, quindi ogni offerta ha un id univoco e non possono esistere due offerte con lo stesso id. L'oggetto utente mantiene un arrayList di id di offerte che ha inserito.
    Io devo estrarre (da un db di MapDB) tutte le aste per le quali un utente ha fatto almeno un'offerta.
    Ho pensato di creare un arrayList di integer in cui metto tutte le offerte che ha fatto un utente, così:

    ArrayList<Integer> idOffUtente= users.get(utenteRiferimento).getOfferte();

    Ora però dovrei confrontare ad uno ad uno tutti gli id contenuti in idOffUtente con tutti quelli presenti nell'arrayList di id di offerte contenuto nel db delle aste. Cioè ogni asta ha un ArrayList<Integer> chiamato Offerte.

    Ho pensato ad unac osad el genere

    codice:
    for (Asta key : aste.values()) {
                    for (int i = 0; i < idOffUtente.size(); i++) {
                        if (condizione che verifica) {
    
                    }
                }
    Il primo for mi serve a scorrere tutto il db delle aste. Il secondo a scorrere tutto l'arrayList degli id con le offerte dell'utente.
    Non so cosa mettere nell'if per fare il confronto... ho visto che esiste:
    idOffUtente.get(i).intValue()
    Non so se intValue() fa quello che penso io, cioè mi restituisce l'intero in posizione i, ma se è così, come lo faccio il confronto con tutti gli int presenti in key.getOfferte() (che mi restituisce l'arrayList di tutte le offerte inserite per quella specifica asta)?
    Grazie!

    Aggiungo che quando c'è una corrispondenza, quello che deve succedere è che aggiungo l'asta trovata all'arrayList di Aste che deve restituire il metodo. In pratica io ho bisogno di sapere quali sono gli oggetti per i quali l'utente ha effettuato almeno un'offerta, quindi quali sono tutte le aste a cui l'utente ha partecipato come offerente.
    Ultima modifica di Jamie04; 05-02-2018 a 16:04

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Mi correggo, qui ho detto una cavolata:
    "L'oggetto offerta mantiene un arrayList di id (in questo caso string) di utenti che hanno inserito un'offerta."
    L'oggetto offerta non ha un arrayList di id di utenti, per ogni offerta c'è l'utente che l'ha inserita, ed è una String.
    Potrei semplicemente estrarre tutte le offerte che ha fatto un utente trovando la corrispondenza fra l'utente che mi interessa e la string offerente contenuta nel db delle offerte, ma in questo modo non riesco ad estrarre qual'è l'asta per cui ha fatto un'offerta, ecco perché devo per forza accedere al db delle aste. Spero di essermi spiegata.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Sono riuscita a farlo cambiando strategia, così:

    codice:
                ArrayList<Integer> idAste=new ArrayList<>();
                for (Offerta key : offerte.values()) {
                    if (key.getOfferente().equals(utenteRiferimento)) {
                        idAste.add(key.getIdAsta());
                    }
                }
                for (Asta key : aste.values()) {
                    for (int i = 0; i < idAste.size(); i++) {
                        if (key.getId()==idAste.get(i).intValue() ) {
                            listaOggettiOsservati.add(key);
                        }
                    }
                }
    Il problema però è che devo escludere i duplicati. Poiché un utente può fare più di un'offerta per la stessa asta, come faccio a dirgli qui (o altrove) escludi tutti i duplicati?
    if (key.getId()==idAste.get(i).intValue() )
    Così come ho fatto io ottengo la lista di tutte le aste per le quali un utente ha mai effettuato almeno una offerta, ma se ha fatto più offerte per la stessa asta in listaOggettiOsservati ci finiscono anche i duplicati. In pratica dovrei escludere da idAste i valori duplicati.

    Edit: ho risolto con un altro ciclo for che mi toglie i duplicati. Sono sicura che c'è un modo più elegante per farlo, ma non ho tempo di trovarlo...sono proprio agli sgoccioli
    Ultima modifica di Jamie04; 05-02-2018 a 18:57

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Mi sono accorta che ho sbagliato il titolo di questo topic: in realtà io ho bisogno di sapere come confrontare un ArrayList con una serie di ArrayList. Infatti io dovrei confrontare i valori di un ArrayList, cioè quello delle offerte inserite dall'utente, con tutti i valori contenuti negli ArrayList delle offerte delle aste. Anche se ho trovato una soluzione alternativa, mi interesserebbe comunque sapere come fare una cosa del genere. In breve, io ho un arraylist di integer e devo estrarre da una mappa tutti gli oggetti che, nei loro arraylist di integer, hanno almeno una corrispondenza con ognuno degli integer contenuti nell'arraylist di riferimento.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.