Gå til innhold

[Løst!]Metoder for å sorterer innholdet i en arraylist


Anbefalte innlegg

Videoannonse
Annonse
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! :thumbup:

 

Takker!

Lenke til kommentar
Ja, dersom alt hadde vært like greit ville det nesten ha blitt litt kjedelig! :thumbup:

 

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
Ja, dersom alt hadde vært like greit ville det nesten ha blitt litt kjedelig! :thumbup:

 

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! :thumbup:

Endret av PelleP
Lenke til kommentar
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
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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...