2015-12-09 13 views
5

Ich habe mehrere Beiträge über Komparatoren überprüft, aber ich steckte an einem Punkt.JAVA Komparator für UTF8 Buchstaben

Vergleicher Ich verwende‘:

@Override 
    public int compare(BaseFolder arg0, BaseFolder arg1) { 
     try { 
      Object value1 = arg0.getName(); 
      Object value2 = arg1.getName(); 

      Collator lithuanianCollator = Collator.getInstance(new Locale("lt_LT")); 
      lithuanianCollator.setStrength(Collator.PRIMARY); 
      int value = lithuanianCollator.compare(value1.toString(), value2.toString()); 

      return SortOrder.ASCENDING.equals(sortOrder) ? value : -1 * value; 
     } 
     catch(Exception e) { 
      throw new RuntimeException(); 
     } 
    } 

Es tut Art, aber es funktioniert nicht richtig auf litauischen Buchstaben, und ich habe keine Ahnung, warum.

EDIT: scheint Sortierung hängt von String Länge, aus irgendeinem Grund.

Zum Beispiel.

enter image description here

EDIT:

public class BaseFolder { 
    private String id; 
    private String name; 
    private String description; 
    private String lastModifiedBy; 
    private String lastModificationDate; 
    private String createdBy; 
    private String creationDate; 
    private String parentId; 

    public BaseFolder() { 
    } 
    public BaseFolder(CmisObject obj) { 
     this.id = obj.getId(); 
     this.name = obj.getName(); 
     this.description = obj.getDescription(); 
     this.lastModificationDate = DateFormatUtils.format(obj.getLastModificationDate().getTime(), "yyyy-MM-dd"); 
     this.lastModifiedBy = obj.getLastModifiedBy(); 
     this.createdBy = obj.getCreatedBy(); 
     this.creationDate = DateFormatUtils.format(obj.getCreationDate().getTime(), "yyyy-MM-dd"); 


    } 
    public BaseFolder(String id, String name, String description, String parentId) { 
     super(); 
     this.id = id; 
     this.name = name; 
     this.description = description; 
     this.parentId = parentId; 
    } 

    public Map<String, Object> getProperties() { 
     Map<String, Object> properties = new HashMap<String, Object>(); 
     properties.put(PropertyIds.PARENT_ID, "cmis:parentId"); 
     properties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder"); 
     properties.put(PropertyIds.NAME, getName()); 
     properties.put(PropertyIds.DESCRIPTION, getDescription()); 
     return properties; 
    } 

mit Java 8, Primefaces, JSF

+0

ich seit 'Wert1 erraten und 'va Lue2' sind vom Typ Object toString() gibt die String-Repräsentation der Objekte zurück. Könnten Sie den Code von 'BaseFolder' teilen? – sinclair

+0

Was ist los mit der Sortierung? – reos

+0

Editierte: Basisfolder-Klasse. Und über das Sortieren. zuerst sollte ein kommen, dann ±, oder ich komme vor į – iJava

Antwort

2

ich diesen Code versucht

public static void main(String[] args) { 

    String[] words = {"ą", "a", "į", "i", "ąąąąą", "aaaaa"}; 

    Collator en_USCollator = Collator.getInstance(new Locale("en","US")); 
    Collator lt_LTCollator = Collator.getInstance(new Locale("lt","LT")); 

    sortStrings(en_USCollator, words); 
    System.out.println(Arrays.toString(words)); 
    sortStrings(lt_LTCollator, words); 
    System.out.println(Arrays.toString(words)); 
} 

public static void sortStrings(Collator collator, String[] words) { 
    String tmp; 
    for (int i = 0; i < words.length; i++) { 
     for (int j = i + 1; j < words.length; j++) { 
      if (collator.compare(words[i], words[j]) > 0) { 
       tmp = words[i]; 
       words[i] = words[j]; 
       words[j] = tmp; 
      } 
     } 
    }  
} 

Dies ist die Ausgabe

zu bestellen

UPDATE

können Sie verwenden RuleBasedCollator

String simple = "< a< ą< i< į"; 
    RuleBasedCollator lt_LTCollator = new RuleBasedCollator(simple); 

Dies ist der Ausgang

[a, aaaaa, ą, ąąąąą, i, į] 

mehr Informationen Hier ist http://docs.oracle.com/javase/7/docs/api/java/text/RuleBasedCollator.html

+0

gleiche wie hier, sollte es [a, aaaaa, ±, AAAAA, i, i] bearbeiten sein: sogar [aaaaa, a, AAAAA, a, i, i] wäre jetzt in Ordnung sein , wenn das einen Unterschied macht – iJava

+0

Ich habe die Antwort bearbeitet – reos

+0

Lassen Sie mich wissen, wenn es Ihnen geholfen hat. – reos