Java - 如何对Set <entry <k,v>&gt;?进行排序?

时间:2016-07-05 17:33:03

标签: java json sorting set key

我有以下Set,有一个json字符串。

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

这是我的第一个问题,所以我道歉并感谢大家的耐心。

1 个答案:

答案 0 :(得分:0)

您可以使用简单的比较器和流来实现此目的:

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

显然,如果您只想迭代它,则不必收集它。 (如果密钥相等,您可能还想使用比较值,尽管在您的问题中未提及。)

我假设你在集合和密钥中都没有空值。

编辑:感谢@JornVernee指出Comparator已经有Map#Entry。使用它,它看起来像这样(collect仍然是可选的,如果您只想迭代它们;您也可以为键指定不同的比较器,语法略有不同):

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