Wie zu Sortieren HashMap<String, String[]> von String in android

Habe ich diesen code:

    HashMap<String, String[]> unsorted = new HashMap<String, String[]>();
    String[] values = new String[3];
    String key;

    //add data to hashmap
    key = "abc";
    values[0] = "a"; values[1]="b"; values[2]="c";
    unsorted.put(key, values);

    key = "abc";
    values[0] = "aa"; values[1]="bb"; values[2]="cb";
    unsorted.put(key, values);

    key = "def";
    values[0] = "d"; values[1]="e"; values[2]="f";
    unsorted.put(key, values);

    //sort hashmap
    /***********/

    //output should be:
    { abc-[a,b,c], abc-[aa,bb,cc], def-[d,e,f] }

    //or

    { abc-[aa,bb,cc], abc-[a,b,c], def-[d,e,f] }

Wie kann ich es Sortieren? Hinweis: ich habe versucht, mit TreeMap, und andere Beispiele, aber Sie beseitigen die Elemente, wo die Schlüssel gleich sind.

Edit: ich mein problem gelöst 🙂 vielen Dank an Guillaume. Hier ist was ich benutzt habe:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class test {

public static void main(String[] args) {

    ArrayList<CustomObject> objs = new ArrayList<CustomObject>();

    objs.add(new CustomObject("abc", new String[] {"a", "b", "c"}));
    objs.add(new CustomObject("def", new String[] {"d", "e", "f"}));
    objs.add(new CustomObject("abc", new String[] {"aa", "bb", "cc"}));


    System.out.println(objs.isEmpty());

    Collections.sort(objs, new Comparator<CustomObject>() {
        @Override
        public int compare(CustomObject o1, CustomObject o2) {
            int i = o1.getKey().compareTo(o2.getKey());
            if(i == 0)
                return -1;
            return i;
        }
    });

    for(int i=0; i<objs.size(); i++)
        System.out.println("key/value pair:" + objs.get(i).getKey() + " - " + objs.get(i).getValues()[0]);
    }
}

Und die CustomObject:

public class CustomObject {

private String key;
private String[] values;

public CustomObject(String key, String[] values) {
    this.key = key;
    this.values = values;
}

public String getKey() {
    return key;
}

public String[] getValues() {
    return values;
}
}
Eine Karte ist soll mit nur einem element für jeden Schlüssel. Warum nicht Sie in string-arrays in Ihrem TreeMap, wie Sie mit der HashMap?
Beachten Sie, dass, wenn Sie jemals brauchen, um Ihre Elemente in einer Karte in der natürlichen Reihenfolge beruht auf einem Komparator, verwenden Sie die Implementierung TreeMap, nicht die HashMap. Keine Map-Implementierung im JDK können doppelte Schlüssel.

InformationsquelleAutor Ovidiu Birgu | 2011-12-13

Schreibe einen Kommentar