Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347

    [Java] compareTo con ordinamento personalizzato

    Allora come da titolo ho bisogno di creare un compareTo personalizzato, nel senso che non dovrebbe agire con i normali valori standard. Mi spiego meglio: l'oggetto contiene al suo interno dei dati, tra i quali 2 stringhe che dovrò usare per l'ordinamento, su una di queste utilizzerò l'ordinamento alfabetico, ma sull'altra dovrò effettuare un altro tipo di ordinamento, come faccio a implementare una cosa del genere? Non mi viene nessuna idea...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java] compareTo con ordinamento personalizzato

    Originariamente inviato da John360
    Allora come da titolo ho bisogno di creare un compareTo personalizzato, nel senso che non dovrebbe agire con i normali valori standard. Mi spiego meglio: l'oggetto contiene al suo interno dei dati, tra i quali 2 stringhe che dovrò usare per l'ordinamento, su una di queste utilizzerò l'ordinamento alfabetico, ma sull'altra dovrò effettuare un altro tipo di ordinamento, come faccio a implementare una cosa del genere? Non mi viene nessuna idea...
    Il compareTo deve solo indicare se il this object è minore/maggiore/uguale ad un altro object. In una tua classe, il criterio sei assolutamente libero di implementarlo come vuoi.

    Se il criterio prende in considerazione più campi, allora innanzitutto devi stabilire un "peso" (a livello concettuale) per i vari campi. Prima compari il campo con peso maggiore, poi eventualmente se necessario, quelli con peso man mano minore.
    Esempio: una classe Persona con nome e cognome e supponi il criterio di ordinamento per cognome/nome. Se un cognome è minore/maggiore dell'altro hai già la risposta. Solo se i cognomi sono uguali, allora passi a valutare i nomi. Ecco, il concetto del "peso" è questo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    Scusami, forse mi sono espresso male. Avendo già seguito il corso di programmazione ad oggetti, abbiamo affrontato anche l'argomento compareTo, ho capito anche cosa intendi con "stabilire un peso".
    Quello che intendevo io è: ad esempio ho 3 parole {gatto, cane, topo}, ordinandole alfabeticamente verrebbe {cane, gatto, topo}, mentre io vorrei venissero ordinate così {topo, gatto, cane} cioè in base alla dimensione ad esempio. Ovviamente non voglio che sia per stringhe in generale, ho 5 stringhe, contenute in 5 oggetti diversi, e vorrei stabilire io un peso tra di loro, poi tramite queste, effettuare il compareTo degli oggetti.
    Ma non ho la più pallida idea di come implementare ciò e SE si possa fare...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da John360
    Scusami, forse mi sono espresso male. Avendo già seguito il corso di programmazione ad oggetti, abbiamo affrontato anche l'argomento compareTo, ho capito anche cosa intendi con "stabilire un peso".
    E allora devi solo chiarire(/chiarirti) quale è il criterio di ordinamento che vuoi fare.

    Originariamente inviato da John360
    {topo, gatto, cane} cioè in base alla dimensione ad esempio.
    In questo scenario dovresti avere "qualcosa" che modella la "dimensione" dell'animale, esplicitamente negli oggetti o implicitamente in qualche altro punto/modo.

    Originariamente inviato da John360
    ho 5 stringhe, contenute in 5 oggetti diversi, e vorrei stabilire io un peso tra di loro
    Comparable/Comparator in generale servono appunto per definire un criterio di ordinamento su una serie di N oggetti.
    Ma fino ad adesso sei stato solo vago, percui ti chiederei cortesemente di chiarire cosa vuoi fare, altrimenti io stesso non saprei dire altro per aiutarti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    Si lo so, il punto è che non so bene come spiegarmi... allora ho una serie di oggetti di una stessa classe ovviamente, questi oggetti contengono una stringa che può essere: "dietro", "centro", o "avanti". In base a queste devo implementare il compareTo in modo che la regola di precedenza sia avanti>centro>dietro.
    Scusami se ancora mi sono spiegato male e se ci ho messo 3 post a farmi capire

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    L'ordinamento viene effettuato in base al valore restituito da compareTo

    Se hai

    int x = A.compareTo(B)

    dovranno valere le seguenti condizioni:

    x < 0 SE A < B
    x == 0 SE A == B
    x > 0 SE A > B

    In base a questo non ci vuole molto a scriverne la logica.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da John360
    questi oggetti contengono una stringa che può essere: "dietro", "centro", o "avanti". In base a queste devo implementare il compareTo in modo che la regola di precedenza sia avanti>centro>dietro.
    Ok, allora in questo caso certamente bisogna trovare il modo di dare una "peso" (nel senso di "priorità", "ordine" ... non nel senso di peso come dicevo io per più campi).
    E visto che questo peso non è intrinseco di qualche caratteristica delle stringhe (caratteri, lunghezza, altro), allora devi per forza "cablare" tu qualcosa da qualche parte.

    Un modo semplice e facilmente espandibile è avere una "mappa" in cui tieni le associazioni es:

    avanti --> 0
    centro --> 1
    dietro --> 2

    Date 2 stringhe, una nel this e l'altra nell'oggetto passato a compareTo, le usi per prendere il "peso" numerico e compari questo, banalmente, per definire l'ordine.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    @Alex prima non mi ero spiegato bene, scusami, non intendevo in che modo ordinare, ma come implementare il fatto che dovevo dare un peso (diverso da quello naturale) a delle stringhe da utilizzare poi nel compareTo.

    @andbin grazie mille per la soluzione, non ci sarei arrivato!

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.