Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Contare quante volte un elemento figura in una lista

    Nel titolo ho scritto lista, ma in realtà è una singola colonna di un TableModel. In pratica devo contare le visite uniche di ogni IP che visita il mio sito (cioè quante visite ci sono con lo stesso IP).

    la variabile "modello" è un TableModel di cui una colonna (la numero 0) contiene gli IP.
    la variabile "elementi" è un List che proviene da un file xml. La utilizzo per contare il numero delle visite (potrei fare anche "model.getColumnCount").
    Da notare che gli IP nel modello possono anche essere sparsi, e non consecutivi.

    codice:
    headers = new String[2];
    headers[0]="IP ";
    headers[1]="Visite";
    TableModel modello2 = new SparseTableModel(elementi.size(), headers);
                int count=0;                 //contatore che conta il numero di volte in cui compare un IP
                for (int i=0; i<elementi.size();i++) {
                    for (int k=i;k<elementi.size();k++){
                        if ((modello.getValueAt(k, 0)).toString().equals((modello.getValueAt(i, 0)).toString()))  //Se l'IP che sto analizzando è uguale al precedente..)
                            count++;   (...aumento il contatore di uno)
                            
                    }                    
                    modello2.setValueAt(modello.getValueAt(i, 0), i, 0);     //scrivo IP nel nuovo modello
                    modello2.setValueAt(count, i, 1);                             //aggiorno numero delle visite nel nuovo modello
                    
                    count=0;
                }
    Il codice funziona ma purtroppo c'è un inconveniente. Alla prima occorrenza di ogni IP, conta il numero di volte che compare fino alla fine del modello. Ma quando scansiona il modello, alla seconda occorrenza, fa sempre la stessa cosa col risultato che, se un IP visita 10 volte il mio sito, allora, poi, ordinando le visite in ordine descrescente nella JTable inizializzato con model2, si trova tipo:

    codice:
    151.31.122.172           10         
    151.31.122.172            9
    151.31.122.172            8
    151.31.122.172            7
    151.31.122.172            6
    151.31.122.172            5
    151.31.122.172            4
    151.31.122.172            3
    151.31.122.172            2
    151.31.122.172            1
    e non era questo ovviamente il risultato voluto. In questa JTable ogni IP deve comparire una ed una sola volta.

    Sapete magari un modo più veloce per fare ciò? (capite che, per esempio, per 15000 visite c'è un po' da aspettare )

  2. #2
    Prima di caricare tutti gli indirizzi all'interno della tabella, fai un mapping di tali indirizzi con il relativo numero di visite.
    In questo modo scorri una sola volta la lista elementi e successivamente carichi il contenuto della mappa nella tabella.

  3. #3
    Originariamente inviato da VincenzoTheBest
    Prima di caricare tutti gli indirizzi all'interno della tabella, fai un mapping di tali indirizzi con il relativo numero di visite.
    In questo modo scorri una sola volta la lista elementi e successivamente carichi il contenuto della mappa nella tabella.
    Eh no, perché in un'altra JTable ci sono tutte le visite nel mio sito con data e ora, ip e indirizzo referente. Quindi devo scorrere sempre due volte

  4. #4
    Originariamente inviato da ardito86
    in un'altra JTable ci sono tutte le visite nel mio sito con data e ora, ip e indirizzo referente.
    Nel post precedente non ne hai fatto menzione, ma in ogni caso la soluzione non varia ..

    Poi, una JTable è per sua natura utilizzata per presentare dati e non per la gestione degli stessi .. forse ti riferisci ad un TableModel.

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.