Java - 如何对 Set<Entry<K,V>> 进行排序?
Java - How to sort a Set<Entry<K,V>>?
我有以下集合,有一个 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()));
}
}
这是我的第一个问题,所以我很抱歉并感谢大家的耐心等待。
您可以使用简单的比较器和流来实现此目的:
entrySet.stream().sorted((e1, e2) -> e1.getKey().compareTo(e2.getKey())).collect(Collectors.toList());
显然,如果您只想迭代它,则不必收集它。 (如果键相等,您可能还想使用该值进行比较,尽管您的问题中没有提到这一点。)
我假设你在集合和键中都没有空值。
编辑:感谢@JornVernee 指出 Map#Entry
已经有一个 Comparator
。使用它,它看起来像这样(如果您只想遍历它们,collect
仍然是可选的;您也可以使用稍微不同的语法为键指定不同的比较器):
entrySet.stream().sorted(Entry.comparingByKey(/*Comparator<String> if needed*/))
.collect(Collectors.toList());
我有以下集合,有一个 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()));
}
}
这是我的第一个问题,所以我很抱歉并感谢大家的耐心等待。
您可以使用简单的比较器和流来实现此目的:
entrySet.stream().sorted((e1, e2) -> e1.getKey().compareTo(e2.getKey())).collect(Collectors.toList());
显然,如果您只想迭代它,则不必收集它。 (如果键相等,您可能还想使用该值进行比较,尽管您的问题中没有提到这一点。)
我假设你在集合和键中都没有空值。
编辑:感谢@JornVernee 指出 Map#Entry
已经有一个 Comparator
。使用它,它看起来像这样(如果您只想遍历它们,collect
仍然是可选的;您也可以使用稍微不同的语法为键指定不同的比较器):
entrySet.stream().sorted(Entry.comparingByKey(/*Comparator<String> if needed*/))
.collect(Collectors.toList());