sort tokens - somebody knows a better solution?

Spin

Top Contributor
Hallo, ich sortiere hier für ein Spiel Karten.

Diese Karten sollen nach Reihen sortiert werden.

Also 1,2,3,4,5,6,7,8,9,10 ... ( erst Rot, dann Blau ... usw.)

Java:
public void sortInRows()
	{
		LinkedList<ITile> redTile = new LinkedList<ITile>();
		LinkedList<ITile> blueTile = new LinkedList<ITile>();
		LinkedList<ITile> blackTile = new LinkedList<ITile>();
		LinkedList<ITile> orangeTile = new LinkedList<ITile>();
		LinkedList<ITile> jokerTile = new LinkedList<ITile>();
		
		for(int i = 0; i < this.tilesOnRack.size(); i++)
		{
			if(this.tilesOnRack.get(i).getColor().equals("red"))
				redTile.add(this.tilesOnRack.get(i));
			else if(this.tilesOnRack.get(i).getColor().equals("black"))
				blackTile.add(this.tilesOnRack.get(i));
			else if(this.tilesOnRack.get(i).getColor().equals("blue"))
				blueTile.add(this.tilesOnRack.get(i));
			else if(this.tilesOnRack.get(i).getColor().equals("orange"))
				orangeTile.add(this.tilesOnRack.get(i));
			else 
				jokerTile.add(this.tilesOnRack.get(i));
		}
		Collections.sort(redTile);
		Collections.sort(blueTile);
		Collections.sort(blackTile);
		Collections.sort(orangeTile);
		this.tilesOnRack.clear();
		this.tilesOnRack.addAll(redTile);
		this.tilesOnRack.addAll(blueTile);
		this.tilesOnRack.addAll(blackTile);
		this.tilesOnRack.addAll(orangeTile);
		this.tilesOnRack.addAll(jokerTile);


Das ist bisher meine Lösung und sie funktioniert wunderbar. Aber hat einer noch einen anderen Ansatz wie man sowas sortieren könnte.

In Collection.sort ... macht das Comparable nur eine > und sortiert ascendent.

grüße spin
 

Marco13

Top Contributor
Erstmal: Keine LinkedList verwenden, sondern eine ArrayList (oder vielleicht sogar gleich einen Array).

Ansonsten... müßtest du die Frage vielleicht noch ein klein wenig ... "ausformulieren"....
 

Landei

Top Contributor
Kommt drauf an, wie du Comparable implementiert hast. Falls es hier nicht passt, du es aber nicht verändern willst, kannst du auch einen Comparator schreiben. Ansonsten: Mehr Code -> mehr Hilfe
 

Spin

Top Contributor
Java:
/**
	 * Compare Tokens and sort them depends on value
	 */
	@Override
	public int compareTo(IToken token) {
		if(token.getValue() == 0 && this.getValue() == 0){
			return 0;
		}
		// [ASC]
		if(this.getValue() < token.getValue()){
			return -1;
		}
		return 1;
	}


Hier ist mein Compartor dazu.


Ich durchsuche mein Liste nach 4 Farben und Joker und packe diese dann nacheinander in eine neue liste. Dann sortiere ich jede einzelne Liste aufsteigend und füge sie dann einer neuen hinzu.

So habe ich eine sortierung nach Farbe und aufsteigend.

Ich kann gerne mein Comporatar anpassen, aber was muss ich dazu tun , wie kann ich mit dem Farbe und Werte vergleichen. Ich denke es geht immer nur 1 oder?

grüße
 

Michael...

Top Contributor
Ich nehme mal an IToken entspricht ITile.
Vergleiche in der compareTo zuerst die Farbe (die würde ich ebenfalls als Zahl codieren) und nur wenn diese gleich ist vergleiche den Wert.
 

Spin

Top Contributor
Jo ich refactor gerade ein Projekt.

Java:
/**
	 * sort all tokens in a group 
	 */
	public void sortInGroup(){
		Collections.sort(this.listOfTokens);	
	}

Aber ich benutze die sompareTo auch für das sortieren von Gruppen.

Wenn ich da erst nach der Farbe vergleiche und dann nach den Wert sortiere , dann bekomme ich nicht da ergebnis was ich jetzt habe.

Macht wohl sinn sich einen eigenen Comporator zu schreiben?
Dann fange ich mal damit an, da ich ja nicht beides in einer comareTo abhandeln kann. :(
 

Spin

Top Contributor
Java:
Collections.sort(this.listOfTokens, new Comparator<IToken>() {

			@Override
			public int compare(IToken token1, IToken token2) {
				
				if(token1.getColor().equals(token2.getColor())){
				
					if(token1.getValue() < token2.getValue()){
						return -1;
					}
					
					if(token1.getValue() > token2.getValue()){
						return 1;
					}
				}
			
			return 0;
			}
		});


Die Farben sind Strings.
Das Problem ist aber das nicht jeder mit jeden vergleichen wird. Sondern immer nur der erste mit dem zweiten und der zweite mit dem dritten usw.

Das funktioniert natürlich nicht.

Gruppen : 10 (Gelb) 10 (Blau) 10 (Rot)

ich habe halt :

1 5 8 9 3 4 7 2 ( alle haben eine Farbe)

Die nun sortien aufsteiegend und in farbe.
Die nun sortieren in Farbe und gleichen Wert.

danke für tipps .....echt kein denken heute mehr ;)
 

Michael...

Top Contributor
In dem Fall wird 0 zurückgegeben wenn die Farben nicht gleich sind. Das ist ja sicher nicht gewollt ;-)
Ich würde mir echt überlegen, die Farben als Zahlen zu codieren. Die kann man einfacher vergleichen als Strings.
 

Marco13

Top Contributor
Also nochmal: Du willst einfach eine Sortierung, bei der primär nach Farbe sortiert wird, und sekunddär nach Wert? Also wenn man sowas hat wie (Rot > Grün > Blau)
R1, G4, B1, R4, G1, B8
Dann soll da rauskommen
R4 R1 , G4 G1 , B8 B1 (oder umgekehrt)
!?

Am einfachsten wohl mit einem Comparator. Man könnte sich da sowas wie einen CompoundComparator basteln, aber das ist wohl nicht so wichtig. Wichtiger für eine Einfache Anwendung wäre wohl eine Ordnung über den Farben. Das könnte man zum Beispiel (!) durch einen etwas komplizierteren Comparator hinkriegen, der irgendwo eine Methode verwendet die den Vergleich mit hunderten if's macht, oder, viel einfacher und flexibler, mit einer Map:
Java:
private static Map<String, Integer> colorMap = createColorMap();
private static Map<String, Integer> createColorMap()
{
    Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("red", 0);
    map.put("blue", 1);
    map.put("black", 2);
    map.put("orange", 3);
    map.put("joker", 4);
    return map;
}


...

void sort(...)
{
    Collections.sort(list, new Comparator<Item>()
    {
        public int compare(Item i0, Item i1)
        {
            int cv0 = colorMap.get(i0.getColor());
            int cv1 = colorMap.get(i1.getColor());
            if (cv0 > cv1) return 1;
            if (cv0 < cv1) return -1;
          
            int v0 = i0.getValue();
            int v1 = i1.getValue();
            if (v0 > v1) return 1;
            if (v0 < v1) return -1;
            
            return 0;
        }
    });

So in etwa...
 

Spin

Top Contributor
Danke Mrco, genau so was dachte ich mir.

Ich wollte eine Map vermeiden ;) Es funktioiert wunderbar und ich kann es sofort generich bauen :)
Vorrausgesetzt die Objekte haben einen Wert und eine Farbe.

Danke dir, noch einfacher gehts wohl net ;):toll:
 

Marco13

Top Contributor
Ja, man könnte eine Map vermeiden (warum genau wolltest du das?) - am einfachsten vermutlich über eine Klasse
Code:
class Suit implements Comparable<Suit>
die die Farbe als String speichert und Vergleichsmöglichkeiten bietet oder so...
 

Spin

Top Contributor
Ich dachte es wäre möglich mit meiner Klasse Token, die einen Wert und eine Farbe unterstützt, mein Problem zu optimieren.

Eine Map erinnert mich immer an PHP (assoziative Arrays). IN PHP ist es gewöhnlich String, Value zu verwenden, doch in Java habe ich noch nicht so oft davon Gebrauch gemacht.

Was Laufzeiten und Effizienz angeht, mache ich mir in dem aktuellen Projekt keine Sorgen, doch arbeite ich auch gern mal mit bis zu 700 .000 User Daten.

:rtfm:

Danke Thread Closed :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
emreiu Formatiertes Output bei Insertion Sort Java Basics - Anfänger-Themen 6
O Sortieren mit Insertion Sort Java Basics - Anfänger-Themen 3
Tw1Z Erste Schritte Sort in java Java Basics - Anfänger-Themen 2
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
X Collections.sort als Lambda Java Basics - Anfänger-Themen 14
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
L Insertion Sort bei zweidimensionalem Array Java Basics - Anfänger-Themen 7
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
Marc111111111 Selection Sort in Java?? Java Basics - Anfänger-Themen 6
G Insertion Sort mit Aray Java Basics - Anfänger-Themen 5
O Collections.sort und List.sort mit Lambda Verwirrung Java Basics - Anfänger-Themen 5
B Collections.sort mit zwei Bedingungen? Java Basics - Anfänger-Themen 4
M Collection.sort sortiert nicht Java Basics - Anfänger-Themen 7
CptK Best Practice Merge-Sort als Baum darstellen Java Basics - Anfänger-Themen 3
P Java Bubble Sort,Anfängerfehler Java Basics - Anfänger-Themen 4
S Methoden Sort Array Java Basics - Anfänger-Themen 9
I Erste Schritte sort() vs. sort() Java Basics - Anfänger-Themen 9
BadBat ArrayList<String> sort by last word Java Basics - Anfänger-Themen 8
U Methoden Zweidimensionales Array mit Arrays.sort sortieren? Java Basics - Anfänger-Themen 22
X Quick Sort - Vergleichsoperationen zählen Java Basics - Anfänger-Themen 0
O Insertion Sort Java Basics - Anfänger-Themen 4
N Bubble Sort sortieren mit Int Werte Java Basics - Anfänger-Themen 8
C OOP array Sortieren ohne den sort Befehl Java Basics - Anfänger-Themen 10
S int-Array mittels Arrays.sort() in einer Schleife sortieren. Java Basics - Anfänger-Themen 2
N Schlüsselworte Bubble Sort nach eigener Ordnung Java Basics - Anfänger-Themen 8
J Fehler im Selection Sort Java Basics - Anfänger-Themen 5
O Listen sort-Methode Java Basics - Anfänger-Themen 1
M Quick Sort Java Basics - Anfänger-Themen 4
V Heap-Sort Java Basics - Anfänger-Themen 0
M Methoden Quick Sort Java Basics - Anfänger-Themen 5
T array.sort mit zwei Kriterien Java Basics - Anfänger-Themen 8
S Liste und Bubble Sort Java Basics - Anfänger-Themen 4
H Collections Was ist schneller - HashMap + Sort v TreeMap? Java Basics - Anfänger-Themen 75
S Fehler bei Arrays.sort(array) - Methode!? Java Basics - Anfänger-Themen 3
P collections.sort Java Basics - Anfänger-Themen 2
B Arrays.sort Java Basics - Anfänger-Themen 4
P schneller Sort ? Java Basics - Anfänger-Themen 2
S Bubble Sort Java Basics - Anfänger-Themen 5
B Merge-Sort Analyse Java Basics - Anfänger-Themen 27
K Array.sort() Java Basics - Anfänger-Themen 12
H Etwas wie sort() / sorted() in JAVA-Collections? Java Basics - Anfänger-Themen 5
B 2 dimensionales Array: Selection Sort Java Basics - Anfänger-Themen 4
F Methoden Insert Sort Fehler Java Basics - Anfänger-Themen 10
P Ein sort problem Java Basics - Anfänger-Themen 6
S Bubble Sort Algorithmus Java Basics - Anfänger-Themen 3
N Selection Sort Problem Java Basics - Anfänger-Themen 19
B Strings alphabentisch sortieren mit Hilfe von insertion sort Java Basics - Anfänger-Themen 6
P Array.sort // Arrays ausgeben Java Basics - Anfänger-Themen 21
S String sortieren mit Interface und sort() Java Basics - Anfänger-Themen 6
F Arrays.sort( ) Problem Java Basics - Anfänger-Themen 14
J Liste von Integers mit Selection Sort sortieren Java Basics - Anfänger-Themen 3
B Selection sort Java Basics - Anfänger-Themen 33
E Selection Sort für beliebige Objekte Java Basics - Anfänger-Themen 24
U Selection Sort schnellere Variante Java Basics - Anfänger-Themen 17
T Selection-Sort-Algorithmus Java Basics - Anfänger-Themen 9
Dit_ Collections.sort(..); | Anwendung Java Basics - Anfänger-Themen 4
N java.util.Arrays.sort Warum sind Leerzeichen vor alphabetischen Zeichen sortiert? Java Basics - Anfänger-Themen 12
D Insertion sort auf eine liste Java Basics - Anfänger-Themen 4
X Counting Sort Java Basics - Anfänger-Themen 5
P Problem mit Insertion Sort Java Basics - Anfänger-Themen 4
G Quick Sort - bin ich zu blöd? Java Basics - Anfänger-Themen 7
D sort.exe über java aufrufen Java Basics - Anfänger-Themen 2
V Bubble Sort endet in Endlosschleife Java Basics - Anfänger-Themen 4
S Collection<Typ> sort Java Basics - Anfänger-Themen 4
hedges Insertion Sort Algorithmus problem Java Basics - Anfänger-Themen 18
N Collections Sort ArrayList<> Java Basics - Anfänger-Themen 7
K Arrays.sort() Java Basics - Anfänger-Themen 2
S Collection Sort Java Basics - Anfänger-Themen 15
O Arrays und sort Java Basics - Anfänger-Themen 4
I Selection-Sort // Array *help* Java Basics - Anfänger-Themen 2
G sort(int[] a, int fromIndex, int toIndex) Java Basics - Anfänger-Themen 5
J Selection Sort in Liste implementieren Java Basics - Anfänger-Themen 3
F Klassenmethode Arrays.sort(Object[]a) Java Basics - Anfänger-Themen 2
H Bubble sort array Java Basics - Anfänger-Themen 12
M Bubble-Sort und null Werte Java Basics - Anfänger-Themen 4
G Zählen von Zuweisungen bei Bubble Sort Java Basics - Anfänger-Themen 3
I Methode Arrays.sort(Object[] arr) Java Basics - Anfänger-Themen 19
K compareTo in Verbinug mit Arrays.sort() Java Basics - Anfänger-Themen 4
0 Selection Sort funktioniert nicht. Java Basics - Anfänger-Themen 3
D Frage zu Collection.sort bzw. Comparator u. Comparable Java Basics - Anfänger-Themen 2
U Array.sort auf variable Array-Größe anwenden Java Basics - Anfänger-Themen 3
D Mit java.util.Arrays.sort die negativen Zahlen hinten Java Basics - Anfänger-Themen 4
D Collections.sort() frage Java Basics - Anfänger-Themen 6
V Sortieren mit Bubble-Sort Java Basics - Anfänger-Themen 5
G Arrays.sort() will nicht sortieren Java Basics - Anfänger-Themen 8
G float-Array _ohne_ Arrays.sort sortieren Java Basics - Anfänger-Themen 5
A Bubble-Sort Java Basics - Anfänger-Themen 3
R Frage zu Bubble-Sort Java Basics - Anfänger-Themen 10
J String mit tokens erstellen Java Basics - Anfänger-Themen 4
F Tokens Java Basics - Anfänger-Themen 5
A Threads anhand eines Tokens abarbeiten Java Basics - Anfänger-Themen 7
K Reguläre Ausdrücke - Gefundene Tokens direkt ermitteln Java Basics - Anfänger-Themen 3
K Tokens in Integer parsen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben