Hallo ,
ich schreibe gerade an einer ArrayList, welche mit ArrayListen des Typs Integer gefüllt wird. Das ganze sieht in etwa so aus:
Java:
privateArrayList<ArrayList> list =newArrayList<ArrayList>();privateArrayList<Integer> innere =newArrayList<Integer>();
Die von der ArrayList inner erstelle ich immer clone und hänge sie in die ArrayList list an.
Jetzt möchte ich gerne meine ArrayList list nach den jeweils letzten Wert der inneren Sortieren:
Ich bin schon darauf gestoßen das dies mit Collections.sort(liste, meinEigenerComperator);
Mein Problem ist jetzt jedoch meinEigenerComperator zu schreiben. Vielleicht bin ich auch auf dem ganz flaschen Dampfer fürs sortieren oder gar mit meiner verwaltung von Integer-Zahlen.
Ich hoffe man kann mein beschriebenes Problem überhaupt verstehen.
Schon einmal vielen dank fürs reinschauen und euch allen frohe Ostertage.
ich vermute mal so könnte dein Komparator aussehen:
Java:
classMyComparatorimplementsComparator<List<Integer>>{publicintcompare(List<Integer> o1,List<Integer> o2 ){// Noch prüfungen ob die listen null oder leer sindreturn o1.get(o1.size()-1).compareTo(o2.get(o2.size()-1));}}
Der vergleicht zwei Listen anhand ihres letzten Wertes.
.. so prinzipiell sollte das aussehen, aber ich vermute, da gibt es Probleme mit den Generics?!
Irgendwie hat es leider dann doch nicht so geklappt wie ich mir das gedacht habe.
Wenn ich das richtig verstanden habe, müsste es ja in etwa wo aussehen:
Jedoch habe ich hier das Problem mit dem Index. Das würde ja auch keine Sinn machen hier mit dem Iterator durchlaufen zu lassen denke ich mir.
Also brauche ich wohl nochmal eure hilfe, ich komme hier nicht ganz weiter.
also der Index ist doch der vom letzten Item? Daher innere1.get(innere1.size()-1), damit kriegst du das letzte Element der Liste.
Hier mal ein Testprogramm:
Java:
importjava.util.*;publicclassNewClass{privateArrayList<ArrayList<Integer>> list =newArrayList<ArrayList<Integer>>();// private ArrayList<Integer> innere = new ArrayList<Integer>(); // brauchst du die? list enthält ja die inneren ListenpublicNewClass(){fill();sort();print();}voidfill(){// list befüllenArrayList<Integer> _list =null;for(int i =0; i <10; i++){
_list =newArrayList<Integer>();for(int j =0; j <10; j++){
_list.add(newInteger((int)(Math.random()*100)));}this.list.add(_list);}}voidsort(){Collections.sort(list,newMyComparator());}voidprint(){// Gibt die letzten Elemente der Listen in list ausfor(ArrayList<Integer> _list : list){System.out.println(_list.get(_list.size()-1));}}publicstaticvoidmain(String[] args ){newNewClass();}}classMyComparatorimplementsComparator<ArrayList<Integer>>{publicintcompare(ArrayList<Integer> o1,ArrayList<Integer> o2 ){// o1 und o2 auf null prüfenInteger i1 = o1.get(o1.size()-1);Integer i2 = o2.get(o2.size()-1);return i1.compareTo(i2);}}
Aiaiaiaiai, jetzt hab ich meinen Fehler gefunden. Ich hatte
Java:
privateArrayList<ArrayList> list =newArrayList<ArrayList>();
anstatt
Java:
privateArrayList<ArrayList<Integer>> list =newArrayList<ArrayList<Integer>>();
,dann hatte er immer an der stelle mit dem Collections.sort(list, new MeinComparator()); gemeckert das der Comperaor nicht passend sei. Ich dachte er würde selber schauen welchen Typ die ArrayList´s haben, welche ich zur Liste "list" hinzufüge - dem schein jedoch nicht so.
Aber gut das mir der Fehler passiert ist, sonst hätte ich mich sicher nicht so ausfühlich damit beschäftigt.
Vielen dank auch nocheinmal für das Beispielprogramm. Und ja du hast recht, die Liste "innere" brauche ich nicht, ich dachte es sei bloß etwas verständlicher, wenn ich sie nocheinmal poste.