PelleP Skrevet 16. april 2009 Del Skrevet 16. april 2009 (endret) Jeg har en Arraylist med navn som jeg ønsker å sortere alfabetisk. Finnes det noen ferdige metoder for det? Endret 19. april 2009 av PelleP Lenke til kommentar
___ Skrevet 16. april 2009 Del Skrevet 16. april 2009 Jeg har en Arraylist med navn som jeg ønsker å sortere alfabetisk. Finnes det noen ferdige metoder for det? Du kan jo forsøke med Collections.sort(), den sorterer alfabetisk. Werner Lenke til kommentar
PelleP Skrevet 16. april 2009 Forfatter Del Skrevet 16. april 2009 Jeg har en Arraylist med navn som jeg ønsker å sortere alfabetisk. Finnes det noen ferdige metoder for det? Du kan jo forsøke med Collections.sort(), den sorterer alfabetisk. Werner Ja, dersom alt hadde vært like greit ville det nesten ha blitt litt kjedelig! Takker! Lenke til kommentar
nirolo Skrevet 16. april 2009 Del Skrevet 16. april 2009 Ja, dersom alt hadde vært like greit ville det nesten ha blitt litt kjedelig! Takker! Desverre er det ikke så lett... Norske bokstaver blir sortert feil, dvs rekkefølgen blir å, æ, ø og ikke ø, æ, å. Å rette opp dette er heldigvis ikke så vanskelig: Collator collator = Collator.getInstance(new Locale("no")); Collections.sort(al, collator); Lenke til kommentar
PelleP Skrevet 16. april 2009 Forfatter Del Skrevet 16. april 2009 (endret) Ja, dersom alt hadde vært like greit ville det nesten ha blitt litt kjedelig! Takker! Desverre er det ikke så lett... Norske bokstaver blir sortert feil, dvs rekkefølgen blir å, æ, ø og ikke ø, æ, å. Å rette opp dette er heldigvis ikke så vanskelig: Collator collator = Collator.getInstance(new Locale("no")); Collections.sort(al, collator); Dette fungerte også når jeg bare hadde importert pakken java.text.Collator; Strålende! Endret 16. april 2009 av PelleP Lenke til kommentar
PelleP Skrevet 17. april 2009 Forfatter Del Skrevet 17. april 2009 Finnes det en like grei metode for å sortere en arraylist med objekter etter verdien på en bestemt variabel? Lenke til kommentar
steingrim Skrevet 18. april 2009 Del Skrevet 18. april 2009 (endret) La objektene dine implementere grensesnittet java.lang.Comparable. Edit: leif Endret 18. april 2009 av steingrim Lenke til kommentar
PelleP Skrevet 18. april 2009 Forfatter Del Skrevet 18. april 2009 La objektene dine implementere grensesnittet java.lang.Comparable. Edit: leif Takk for tipset! Jeg har prøvd å google litt etter informasjon om java.lang.Comparable, men har ikke klart å finne ut hvordan jeg skal gjøre det. Jeg har en Arraylist bestående av objekter av klassen glose:: ArrayList<glose> ordliste = new ArrayList<glose>(); // ... class glose{ String engelsk, norsk; boolean riktig = false; int feil = 0;} Jeg vil at listen skal sorteres etter variabeln feil (i omvent rekkefølge). Kan noen være så snill å forklare hvordan jeg får gjort det? Lenke til kommentar
nirolo Skrevet 18. april 2009 Del Skrevet 18. april 2009 Jeg vil at listen skal sorteres etter variabeln feil (i omvent rekkefølge). Kan noen være så snill å forklare hvordan jeg får gjort det? For å definere hvordan en klasse skal sorteres, så kan klassen implementere java.lang.Comparable. Dvs at du får class Glose implements Comparable<Glose> { Du må da legge til metoden compareTo. public int compareTo(Glose glose) {.....} I denne metoden skal du si hvordan glose-objektene dine skal sorteres. Dette gjøres ved å returnere et tall. Dersom tallet du returnerer er negativ, skal "this" ligge før objektet du mottok som argument. Posistivt omvendt og 0 dersom de er like. Dersom du bare skal sortere baklengs på variabelen feil, så kan metoden bli som dette: public int compareTo(Glose glose) { return glose.feil - this.feil; } Du vil da sortere fra størst til minst. compareTo metoden kan være så avansert du bare vil, du kan f.eks først sortere på "feil" som over, og så sortere på "riktig" dvs at der hvor det er lik verdi i "feil", så skal de som har "riktig" lik "true" komme først. Du får da noe ala: public int compareTo(Glose glose) { int retVal = glose.feil - this.feil; if (retVal == 0) { retVal = Boolean.valueOf(riktig).compareTo(glose.riktig); } return retVal; } Se forøvrig http://java.sun.com/j2se/1.5.0/docs/api/ja...Comparable.html Dersom du ønsker å sortere en klasse på forskjellige måter i ulike situasjoner, så kan du lage egne klasser som tar seg av dette ved å implementere Comparator interfacet, se http://java.sun.com/j2se/1.5.0/docs/api/ja...Comparator.html. Lenke til kommentar
PelleP Skrevet 19. april 2009 Forfatter Del Skrevet 19. april 2009 Jeg skjønner tydeligvis ikke det her. Jeg endret klassen glose slik som ble forklart ovenfor: class Glose implements Comparable<Glose>{ String engelsk, norsk; boolean riktig = false; int feil =100; } public int compareTo(Glose g) { return g.feil - this.feil; } } Og i klasse ordliste som har en Arraylist ordliste med gloser så la jeg inn en test metode: void sortere(){ ordliste.get(0).feil=0; ordliste.get(1).feil=1; ordliste.get(1).compareTo(ordliste.get(0)); } Jeg trodde at den ville bytte plass på de to første glosen i listen, men det skjer ikke noe som helst. Er jeg helt ute å kjører eller? Lenke til kommentar
RavnTM Skrevet 19. april 2009 Del Skrevet 19. april 2009 Bruk dette når du skal sortere: import java.util.*; ... Collections.sort(ordliste); Da vil ordliste bli sortert etter compareTo()-metoden. Lenke til kommentar
PelleP Skrevet 19. april 2009 Forfatter Del Skrevet 19. april 2009 Bruk dette når du skal sortere: import java.util.*; ... Collections.sort(ordliste); Da vil ordliste bli sortert etter compareTo()-metoden. Ja minsann! :!: Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå