2016-07-05 5 views
0

Ich habe den folgenden Satz, mit einem JSON-String.Java - Wie sortiere ich ein Set <Entry<K,V>>?

Set<Entry<String, JsonElement>> entrySet = jsonObject.entrySet(); 

Ich möchte diese Liste nach Schlüssel sortiert haben, aber ich stecke hier fest. Sie würden eine Möglichkeit zum Sortieren oder eine bessere Art der Verwendung des JSON vorschlagen?

Meine Ziele:

for(Entry entry : entrySet) { 
    if(!"sign".equals(entry.getKey())){   
    JsonElement elemValue = jsonObject.get((String) entry.getKey()); 
    postParameters.add(new BasicNameValuePair((String) entry.getKey(), elemValue.getAsString())); 
    } 
} 

Das ist meine erste Frage ist, so entschuldige ich mich und danke Ihnen allen für die Geduld.

+0

Diese Einträge Kommst du von einer Karte? Wenn dies der Fall ist, können Sie eine TreeMap erstellen und die Einträge automatisch nach Schlüsselwerten sortieren lassen. –

+0

@csharpfolk Ich frage mich, wie 'Entry' sortiert wird, wenn Sie keinen' Comparator' zuweisen. –

+0

@KeqiangLi Sie haben Recht, entfernte ich meinen Kommentar – csharpfolk

Antwort

0

Sie einen einfachen Komparator verwenden können und Bäche, dies zu erreichen:

entrySet.stream().sorted((e1, e2) -> e1.getKey().compareTo(e2.getKey())).collect(Collectors.toList()); 

Natürlich, wenn Sie nur über sie zu durchlaufen wollen, müssen Sie es nicht sammeln. (Sie könnten auch den Wert für den Vergleich verwenden, wenn die Schlüssel gleich sind, obwohl das in Ihrer Frage nicht erwähnt wurde.)

Ich nahm an, dass Sie weder null noch null Werte in der Menge, noch in die Schlüssel.

Edit: Danke an @JornVernee zum Hinweis, dass es bereits eine Comparator für Map#Entry s gibt. Mit, dass, würde es so aussehen (collect falls noch optional ist man durch sie nur wiederholen wollen, können Sie auch einen anderen Komparator für die Schlüssel zu mit einer etwas anderen Syntax angeben):

entrySet.stream().sorted(Entry.comparingByKey(/*Comparator<String> if needed*/)) 
      .collect(Collectors.toList()); 
+0

Tipp: Sie können '' 'Map.Entry.comparingByKey()' '', als Komparator verwenden. –

+0

@JornVernee cool, das wusste ich nicht. Vielen Dank. –

+0

Ausgearbeitet! Vielen Dank! Ich habe einen Weg gefunden, die postParameters nach dem For zu sortieren, was auch eine gute Lösung war. 'Collections.sort (Postparameters, neue Vergleicher () { \t \t \t @Override \t \t \t public int vergleichen (Namevaluepair o1, o2 Namevaluepair) { \t \t \t \t return (o1.getName(). compareTo (o2.getName())); \t \t \t} \t \t}); ' –

Verwandte Themen