2016-07-05 20 views
0

我有以下設置,有一個JSON字符串。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我不知道如果你沒有指定'比較器','Entry'會被排序。 –

+0

@KeqiangLi你是對的,我刪除了我的評論 – csharpfolk

回答

0

您可以使用一個簡單的比較器和流來實現這一目標:

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

顯然,如果你只想遍歷它,你不必收集。 (你可能也想使用這個值來比較密鑰是否相等,儘管這在你的問題中沒有提到。)

我假設你沒有空值(s)既不在集合中也不在按鍵。

編輯:感謝@JornVernee指出已有ComparatorMap#Entry s。利用這一點,它看起來像這樣(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公衆詮釋比較(的NameValuePair O1,O2的NameValuePair){ \t \t \t \t回報(o1.getName()。 compareTo(o2.getName())); \t \t \t} \t \t}); –

相關問題