Eigener Comparator

redbomber

Bekanntes Mitglied
Hi zusammen,
versuche gerade eine Sortierung von Daten (Strings) vorzunehmen. Das besondere dabei ist, dass die Strings Sonderzeichen enthalten (ein anderer Font-Typ). Da der Anwender eine definierte Reihenfolge der Zeichen erwartet, habe ich mir von ihm eine Liste geben lassen, wo jeder Buchstabe einen Index erhalten hat.

Wie soll ich das mit der Sortierung nun am besten machen. Habe daran gedacht die Strings (die jeweils einen Index erhalten haben) aus der Datei einzulesen und intern in einer HashMap einzuordnen. Der key ist dabei der String und Value ist dessen Index.
Dann implementiere ich meinen Comparator und greife beim Vergleich für jeden Char auf die HashMap zu.

Kann man das so machen? Ist dies sinnvoll? Oder was meint ihr?
 

0x7F800000

Top Contributor
Kann man das so machen? Ist dies sinnvoll? Oder was meint ihr?
Nja... Ansichtssache... Da du schon der zweite bist, der in den letzten drei tagen danach fragt, erscheint's mir dann doch nicht zu unsinnig, das ganze ein wenig modularer und wiederverwertbarer zu gestalten:
Java:
import java.util.*;
import static java.lang.System.*;
import static java.util.Collections.*;

class PartialReorderingComparator<T extends Comparable<T>> implements Comparator<T>{
	private HashMap<T,T> permutation;
	public PartialReorderingComparator(List<T> reordered){
		List<T> ordered = new ArrayList<T>(reordered);
		sort(ordered);
		
		permutation = new HashMap<T,T>();
		for(Iterator<T> ordIt = ordered.iterator(),
						reordIt = reordered.iterator();
			ordIt.hasNext();){
			permutation.put(reordIt.next(),ordIt.next());
		}
	}
	
	public PartialReorderingComparator(T... reordered){
		this(Arrays.asList(reordered));
	}
	
	private T eval(T t){
		if(permutation.containsKey(t)){
			return permutation.get(t);
		}else{
			return t;
		}
	}
	@Override
	public int compare(T a, T b){
		T aa = eval(a), bb = eval(b);
		return aa.compareTo(bb);
	}
}

class LexStringComparator implements Comparator<String>{
	private Comparator<Character> charComparator;
	public LexStringComparator(Comparator<Character> cc){
		charComparator = cc;
	}
	
	@Override
	public int compare(String a, String b){
		for(int i=0; i<Math.min(a.length(),b.length()); i++){
			int charComparaison = charComparator.compare(a.charAt(i),b.charAt(i));
			if(charComparaison!=0) return charComparaison;
		}
		return b.length()-a.length();
	}
}

public class PartialReorderingComparatorExample {
	public static void main(String... _) {
		
		Character[] reihenfolge = {'c','b','a'};
		Comparator<String> comparator 
			= new LexStringComparator(
					new PartialReorderingComparator<Character>(Arrays.asList(reihenfolge))
			);
		
		String[] data = {"blah","hallo","bca","abc","aab","bcc","hbca"};
		
		Arrays.sort(data,comparator);
		System.out.println(Arrays.toString(data));
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JavaDocu in eigener Bibliothek Allgemeine Java-Themen 2
HarleyDavidson Eigener PropertyChangeListener funktioniert einfach nicht Allgemeine Java-Themen 3
T Datei öffnen mit eigener Applikation.exe Allgemeine Java-Themen 4
D Arraylist eigener Klasse an iReport übergeben Allgemeine Java-Themen 7
K Jar mit eigener JRE ausliefern Allgemeine Java-Themen 13
G eigener PropertyChangedListener Allgemeine Java-Themen 2
S OOP ClassCastException bei casting von eigener Klasse aus Iterator Allgemeine Java-Themen 3
V Serialisierung von Instanz eigener Klasse Allgemeine Java-Themen 5
N Vergleich eigener Klassen Allgemeine Java-Themen 5
T Vererbung Eigener Datentyp: Betriebsmittel Allgemeine Java-Themen 2
J Erste Schritte Kommerzielle nutzung eigener Javaapplets auf der Homepage Allgemeine Java-Themen 2
B Probleme mit eigener equals Methode Allgemeine Java-Themen 18
Kr0e Eigener Updatemechanismus Allgemeine Java-Themen 7
J Mein eigener Messenger und dessen Probleme Allgemeine Java-Themen 48
S Profiler-Funktionen in eigener Applikation nutzen..? Allgemeine Java-Themen 5
T Zeit von einem Server/Webseite auslesen und in eigener GUI anzeigen Allgemeine Java-Themen 6
V Probleme mit eigener Hashmap Allgemeine Java-Themen 10
B Eigener ClassLoader Allgemeine Java-Themen 9
R Eigener Assoziativ-Speicher Allgemeine Java-Themen 7
T CP Problem: Webstart + Logging properties file + eigener Handler Allgemeine Java-Themen 7
P eigener Klassenname Allgemeine Java-Themen 4
D Eigener Key bei AES Verschlüsselung Allgemeine Java-Themen 4
T enums - eigener startwert Allgemeine Java-Themen 5
J Eigener ClassLoader wird nicht immer verwendet Allgemeine Java-Themen 3
P eigener Thread für einen JButton Allgemeine Java-Themen 32
F Checkbox in JTable , eigener Cellrenderer -wie gehts weiter? Allgemeine Java-Themen 2
A JRE auf eigener Seite verlinken oder zum Download anbieten? Allgemeine Java-Themen 13
E Wie: Eigener Listener, eigenes Event (möglichst einfach) Allgemeine Java-Themen 29
G eigener logger mittels classe (dynamische logfilename) log4j Allgemeine Java-Themen 15
D Eigener Maven2 Plugin Server? Allgemeine Java-Themen 3
I RSA - Eigener Quelltext Allgemeine Java-Themen 4
M eigener LautstärkeRegler schädlich für soundkarte? Allgemeine Java-Themen 4
K JTree plus eigener FileLoader Allgemeine Java-Themen 2
L Problem mit eigener, abgeleiteter Klasse Allgemeine Java-Themen 2
S Eigener Editor Allgemeine Java-Themen 7
L Eigener Onlinestunden- Zähler / Problemchen Allgemeine Java-Themen 2
T Comparator Allgemeine Java-Themen 3
T komplizierter Comparator (IllegalArgumentException) Allgemeine Java-Themen 3
D Comparator Allgemeine Java-Themen 7
S TreeSet - Comparator ändern -> resort? Allgemeine Java-Themen 8
W Comparator oder TreeMap? Allgemeine Java-Themen 10
J Comparator bei Gleichheit zweites Kriterium mitgeben Allgemeine Java-Themen 4
J TreeSet und Comparator will nicht so wie ich Allgemeine Java-Themen 2
R Eigenen Comparator schreiben ? Allgemeine Java-Themen 10
V Comparator (steh wohl aufm Schlauch) Allgemeine Java-Themen 12
B Sortierung einer ArrayList mit Comparator Allgemeine Java-Themen 6
Z Probleme mit Comparator für binarySearch Allgemeine Java-Themen 2
S Performance von Comparator Allgemeine Java-Themen 3
T TreeMap durch Comparator mit Generics sortieren Allgemeine Java-Themen 9
N Object-Array mit Comparator absteigend sortieren? Allgemeine Java-Themen 10
S Comparator verwenden? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben