|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 581
|
[Java-Jade]Confronto di stringhe fra due Liste
Ciao a tutti sto realizzando un'applicazione che bilancia un carico in un cluster e mi trovo in difficoltà nel confronto fra due liste.
La prima lista contiene tutti gli agenti di un container e puo essere di un ordine variabile da 1 a 10 agenti, la seconda invece contiene una lista degli agenti che possono essere bilanciati all'interno della mia architettura. La mia applicazione funziona cosi: una volta conosciuto chi è il container con piu risorse Cpu vado a vedere chi sono gli agenti che si trovano all'interno, se ci sono agenti che possono essere spostati,uno alla volta vengono spostati in altri container. La mia difficoltà sta proprio nel confrontare queste 2 liste perche non so a priori il numero di agenti che ci sono in un container ne quelli che possono essere spostati in tutta la mia piattaforma e allora ho provato con il ciclo for e a volte funziona e a volte no. Ecco il codice(sicuramente incorretto): Codice:
for(int i=0;i<ListaAgentiContCarico.size();i++){ Iterator it= ServerCar.iterator(); while (it.hasNext()){ if (ListaAgentiContCarico.get(i).toString().contains(it.next().toString())){ VettListaAgentiContCarico.add(ListaAgentiContCarico.get(i)); } } } ServerCar contiene la lista di tutti gli agenti che possono essere spostati Infine VettListaAgentiContCarico dovrebbe contenere dopo fatto il confronto la lista degli agenti che si trovano in quel container e che possono essere spostati. Come posso gestire questa situazione? Grazie mille
__________________
Toshiba M40-281 |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Non conosco Jade, quindi non so come un agente venga univocamente identificato, però mi sembra chiaro che al posto di memorizzare gli agenti "che possono essere spostati" (chiamiamoli 'riassegnabili') in una lista come fai adesso sarebbe invece sufficiente memorizzare solo gli ID degli agenti; ad esempio in un HashSet, tipo:
Quote:
Codice:
List<Agente> agentiDaRiassegnare = new ArrayList<Agente>(); for (Agente agente : listaAgentiConCarico) { if (idAgentiRiassegnabili.contains(agente.getID())) agentiDaRiassegnare.add(agente); } return agentiDaRiassegnare;
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 581
|
Ciao grazie per la risposta ma non sono riuscito ad utilizzarlo perché mi da un errore qua:
Codice:
List<Agente> agentiDaRiassegnare = new ArrayList<Agente>(); Grazie ancora
__________________
Toshiba M40-281 |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Immagino tu lo chieda perchè non conosci i Generics; comunque ci andrebbe il tipo delle istanze dei tuoi agenti.
Per capirci, immagina di voler creare una lista che contenga istanze di tipo String. Senza i Generics diresti: Codice:
List listaDiString = new ArrayList(); Codice:
Object obj= new Object(); listaDiString.add(obj) ![]() Codice:
// somewhere else in the code... int index = 0; String s = (String) listaDiString.get(index); // Boom! ClassCastException... Codice:
List<String> listaDiString = new ArrayList<String>(); Inoltre non è neccessario il cast quando recuperi un elemento. Ci sarebbe molto altro da dire sui Generics, ma ciò esula dal tuo problema.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 581
|
Ok grazie delle spiegazioni molto chiaro e esauriente,scusami se ti rispondo solo ora. L'ultima cosa che ti chiedo è:
nel ciclo for (Agente agente : ....) in agente cosa ci devo mettere? Perche se ho capito bene in Set metto gli agenti che posso spostare, in listaagenticarico ho tutti i miei agenti della piattaforma e poi creo una nuova lista dove metto il confronto effettuato, l'unica cosa è il ciclo for che mi rimane incompreso. Jade salva gli agenti in AID che è l'identificativo di un agente, in pratica NomeAgente@posizione ![]() Grazie ancora.
__________________
Toshiba M40-281 |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Ciao, ripeto che non conosco Jade e il codice scritto era più per darti un'idea che altro.
Agente sarebbe il nome di un tipo che mi sono inventato che dovrebbe corrispondere a quello che in Jade e nel tuo software è il tipo di un agente. Quando dico: Codice:
for (Agente agente : listaAgentiConCarico) { if (idAgentiRiassegnabili.contains(agente.getID())) agentiDaRiassegnare.add(agente); } Come questo si traduca nel tuo software lo sai solo tu, e comunque era solo un'idea di massima ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 26-04-2011 alle 09:18. |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Mar 2004
Messaggi: 581
|
Grazie infinitamente. Tutto funziona alla perfezione
![]()
__________________
Toshiba M40-281 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:48.