我有一个地图,有字符串的键和值。

数据如下所示:

“问题1”,“1” “question9”、“1” “问题2”、“4” “问题5”、“2”

我想根据键对映射进行排序。所以,最后,我将得到问题1,问题2,问题3,等等。

最终,我试图从这个Map中得到两个字符串:

第一串:问题(按顺序1 ..10) 第二串:答案(与问题顺序相同)

现在我有以下内容:

Iterator it = paramMap.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry pairs = (Map.Entry) it.next();
    questionAnswers += pairs.getKey() + ",";
}

这让我得到了一个字符串中的问题,但它们不是按顺序排列的。


当前回答

我们也可以使用数组对键进行排序。排序方法。

Map<String, String> map = new HashMap<String, String>();
Object[] objArr = new Object[map.size()];

for (int i = 0; i < map.size(); i++) {
    objArr[i] = map.get(i);
}

Arrays.sort(objArr);

for (Object str : objArr) {
    System.out.println(str);
}

其他回答

使用LinkedHashMap,它提供了密钥排序。它的性能也和HashMap一样。它们都实现了Map接口,所以你可以将初始化对象HashMap替换为LinkedHashMap。

只需使用TreeMap:

new TreeMap<String, String>(unsortMap);

请注意,TreeMap是根据“键”的自然顺序进行排序的。

在Java 8中,你也可以使用.stream().sorted():

myMap.keySet().stream().sorted().forEach(key -> {
        String value = myMap.get(key);

        System.out.println("key: " + key);
        System.out.println("value: " + value);
    }
);
List<String> list = new ArrayList<String>();
Map<String, String> map = new HashMap<String, String>();
for (String str : map.keySet()) {
  list.add(str);
}

Collections.sort(list);

for (String str : list) {
  System.out.println(str);
}

以防你不想使用TreeMap:

public static Map<Integer, Integer> sortByKey(Map<Integer, Integer> map) {
    List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
    list.sort(Comparator.comparingInt(Map.Entry::getKey));
    Map<Integer, Integer> sortedMap = new LinkedHashMap<>();
    list.forEach(e -> sortedMap.put(e.getKey(), e.getValue()));
    return sortedMap;
}

此外,如果您想要根据值对映射进行排序,只需更改map。入口::getKey映射。入口::getValue。