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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie brauchen eine spezielle Bestellung, und die Möglichkeit, mehrere Objekte die gleiche "Schlüssel", das schreit nach
List
mit einem kundenspezifischenComparator
.1 - Definieren Sie eine Klasse von Elementen zu speichern in der Liste. In Ihrem Fall, es ist ein Objekt, die hat 2 Felder: ein "Schlüssel" und ein array von String. Nennen wir es
CustomObject
(Sie können es nennen, wie Sie wollen)2 - Stick alle Ihre Objekte in der Liste
So:
3 - Bestellen Sie Ihre Liste mit einer benutzerdefinierten Komparator.
Sortieren Sie die Liste tun
(dein Komparator braucht, um ein bisschen mehr anspruchsvoll, richtig vergleichen von arrays, aber du verstehst, was ich meine).
Alternative zu, ist das hinzufügen einer natürlichen bestellen, um Ihre
CustomObject
(implementiertComparable
), und kleben Sie Sie in eineTreeSet
.Nein, Nein, die Verwendung einer ArrayList 🙂 ich sagte, Liste, denn es ist die Schnittstelle, können Sie Ihre Implementierungen (ArrayList oder LinkedList)
Froh, dass es geholfen 🙂 Aber wirklich, sollten Sie einen richtigen Namen anstatt CustomObject, etwas, das beschreibt, was Ihre Objekte sind
InformationsquelleAutor Guillaume
Die HashMap kann nicht sortiert werden (oder duplicate keys), es ist Teil davon, wie es implementiert ist (siehe Dokumentation).
So dass Sie besser zu tun als andere Menschen sind darauf hindeutet, und wechseln Sie zu einer Liste oder einer anderen map-Implementierung.
InformationsquelleAutor Jave
Müssen Sie eine Karte, können doppelte Schlüssel, es gibt keine solche Karte in das JDK. Versuchen Sie es mit einer Multimap in Google guava.
http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Multimap.html
Einer Umsetzung, die Natürliche Ordnung der TreeMultiMap:
http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/TreeMultimap.html
Glück 🙂
InformationsquelleAutor Thomas Johan Eggum
Können Sie auch Sortieren Sie Ihre hashmap mit der folgenden Methode
rufen Sie die Methode wie
//shift Ihre hashmap
InformationsquelleAutor Dashrath Rathod