Multidesk.be » Forums » Java » Sorteren (welke best gebruiken?)

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door SMG op zaterdag 17 oktober 2009 om 17:41:50.
SMG's avatar
Multiviteit: 12000
Moderator
Ik zit met een sorteerprobleem. Ik zal het illustreren met een voorbeeld. Het echte probleem zit ietswat complexer in elkaar maar dit de denkwijze erachter:
CODE
  1. SortedSet<Test> testjes = Collections.synchronizedSortedSet(new TreeSet<Test>());
  2.  
  3. testjes.add(new Test("zzz", "aaa"));
  4. testjes.add(new Test("bbb", "xxx"));
  5.  
  6. for(Test t : testjes){
  7.         System.out.println(t.toString());
  8. }

Ik heb dus een klasse Test die 2 strings als instantievariabelen heeft. In mijn driver klasse maak ik 2 objecten aan van de Test klasse en prop die in een TreeSet (omdat het gesorteerd eruit moet komen). Maar ik wil niet alleen kunnen sorteren op die eerste string, maar ook eens op die tweede.

Iemand een ideetje hoe dit moet met een treeset, treemap of iets anders?

Klasse test heeft logischer wijze een compareTo. Wat mij een mogelijkheid lijkt is om de treeset te forceren om een andere compareTo (bv compareToTweedeString) te gebruiken ipv de standaard compareTo (maar heb geen flauw idee hoe ik dat moet verwezenlijken :D).
Deze tekst werd het laatst bewerkt voor 3.51 % door SMG op zaterdag 17 oktober 2009 om 18:53:31.
^ Reactie #1 geschreven door NightCreature op zondag 18 oktober 2009 om 04:07:27.
NightCreature's avatar
Multiviteit: 1196
MSc.
IComparer zou ik zeggen in .NET maar Java kun je aan de sort functie een functie meegeven waar mee gesorteerd moet worden.

In OO talen zal je dan een object moeten aan maken dat de compare functie implementeerd, ook wel functor genoemd. De functie heet een RHS(Right Hand Side) en een LHS(Left Hand Side) argument beide van type Object zodat je meerdere types erin kunt duwen.

Een functor is een object dat de operator() implementeerd. Implementatie ziet er dan als volgt uit om te sorteren:
std :: sort(beginIterator, endIterator, sortFunctor)
Sorry dat ik je een oplossing in C++ geef maar je kunt vast in Java iets dergelijks doen. Het enige dat je nodig hebt is een container die een sort functie heeft en dergelijke argumenten meeneemt.

http://en.wikipedia.org/wiki/Function_object
http://ifacethoughts.net/2007/01/04/functors-in-java/
http://stackoverflow.com/questions/933886/stdsort-without-functors
Deze tekst werd het laatst bewerkt voor 10.25 % door NightCreature op zondag 18 oktober 2009 om 04:09:34.
I need thought completion.
Shaders, een beetje vreemd maar wel lekker (voor de ogen dan he)
2.83Ghz Q9550 HD4850 512MiB 4GiB 1333Mhz DDR3 RAM
http://paulintheuk.blogspot.com
FE Programmer @ Codemasters (Front End)
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen