2016-07-05 5 views
0

私はjson文字列を持つ次のSetを持っています。Java - セットをソートする方法<Entry<K,V>>?

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

私はこのリストをキーでソートしたいと思っていますが、私はここにこだわっています。 JSONをソートする方法やより良い方法を提案するでしょうか?

私の目的:

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())); 
    } 
} 

私の最初の質問ですので、私は謝罪と忍耐ありがとうございました。

+0

は、これらのエントリを実行します。何らかの地図から来ていますか?もしそうなら、それを 'TreeMap'にして、キー値でソートされた項目を自動的に得ることができます。 –

+0

@csharpfolkあなたが 'Comparator'を割り当てなければ、' Entry'がどのようにソートされるのだろうと思います。 –

+0

あなたが正しいです@KeqiangLiそれはグーグルのlib、GsonのJsonObjectだ@MickMnemonic、私は私のコメント – csharpfolk

答えて

0

あなたは、単純なコンパレータを使用し、これを達成するためにストリームすることができます

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

を明らかにあなたはそれだけを反復処理したい場合、あなたはそれを収集する必要はありません。 (あなたの質問には言及されていませんが、キーが等しい場合には比較のために値を使用することもできます)。

私はセット内にもヌル値も持たないと仮定しました。キー。

編集:Map#Entryには既にComparatorがあることを指摘してくれた@JornVerneeに感謝します。それを使用して、それが(collectはまだあなたがちょうどそれらを反復処理したい場合は、オプションであり、あなたはまた、キーに別のコンパレータを指定することができますあまりにもわずかに異なる構文を使用して)次のようになります。

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

ヒント:コンパイラとして '' 'Map.Entry.comparingByKey()' ''を使用することができます。 –

+0

@JornVerneeクール、私はそれを知らなかった。ありがとうございました。 –

+0

解決済み!ありがとう! 私はpostParametersを、Forの後にソートする方法を考え出しましたが、これも良い解決策でした。 'Collections.sort(postParameters、新しいコンパレータ<のNameValuePair>(){ \t \t \t @Override \t \t \t公共INT比較(のNameValuePair O1、O2のNameValuePair){ \t \t \t \tリターン(o1.getName()。 compareTo(o2.getName())); \t \t \t} \t \t}); –

関連する問題