📌  相关文章
📜  Java程序按值对映射进行排序(1)

📅  最后修改于: 2023-12-03 14:43:03.689000             🧑  作者: Mango

Java程序按值对映射进行排序

在Java中,我们经常需要对值对映射进行排序。这种映射可以由Map接口以及其实现类来表示。本文将介绍如何使用Java程序按照值对映射进行排序。

1. 对Map.Entry进行排序

我们可以使用Map.Entry类来表示映射的条目。它的实例表示一个映射的关键字和值的映射。我们可以将Map.Entry的实例放入List中,并使用Collections.sort()方法对列表进行排序。

Map<Integer, String> unsortedMap = new HashMap<Integer, String>();
unsortedMap.put(3, "three");
unsortedMap.put(2, "two");
unsortedMap.put(1, "one");
unsortedMap.put(4, "four");

List<Map.Entry<Integer, String>> list = new LinkedList<>(unsortedMap.entrySet());

Collections.sort(list, new Comparator<Map.Entry<Integer, String>>() {
    public int compare(Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) {
        return o1.getValue().compareTo(o2.getValue());
    }
});

上述代码创建了一个未排序的映射,这个映射将整数与字符串进行关联。然后它将该映射的条目放入LinkedList列表中。把这个列表传递给Collections.sort()方法,并在其中传递一个比较器类,该类将根据条目的值对这些条目进行排序。

2. 使用Lambda表达式进行排序

在Java 8及更高版本中,我们可以使用Lambda表达式对Map.Entry按值对其进行排序。

Map<Integer, String> unsortedMap = new HashMap<Integer, String>();
unsortedMap.put(3, "three");
unsortedMap.put(2, "two");
unsortedMap.put(1, "one");
unsortedMap.put(4, "four");

List<Map.Entry<Integer, String>> list = new LinkedList<>(unsortedMap.entrySet());

list.sort((Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) -> o1.getValue().compareTo(o2.getValue()));

上述代码创建了一个未排序的映射,然后它将该映射的条目放入LinkedList列表中。调用List.sort()方法时,传递一个Lambda表达式作为排序函数,它根据条目的值对这些条目进行排序。

3. 将Map.Entry排序后的结果放回Map中

我们可以将排序结果作为一个新的Map返回,或直接将排序结果放回旧的Map中。

Map<Integer, String> unsortedMap = new HashMap<Integer, String>();
unsortedMap.put(3, "three");
unsortedMap.put(2, "two");
unsortedMap.put(1, "one");
unsortedMap.put(4, "four");

List<Map.Entry<Integer, String>> list = new LinkedList<>(unsortedMap.entrySet());

// sort list based on values
list.sort((Map.Entry<Integer, String> o1, Map.Entry<Integer, String> o2) -> o1.getValue().compareTo(o2.getValue()));

Map<Integer, String> sortedMap = new LinkedHashMap<>();
for (Map.Entry<Integer, String> entry : list) {
    sortedMap.put(entry.getKey(), entry.getValue());
}

System.out.println(sortedMap);

上述代码创建了一个未排序的映射,然后它将该映射的条目放入LinkedList列表中。调用List.sort()方法时,传递一个Lambda表达式作为排序函数,它根据条目的值对这些条目进行排序。然后将排序结果放入一个新的LinkedHashMap中。

总结

本文介绍了如何在Java程序中对值对映射进行排序。我们可以使用Map.Entry类来表示映射的条目,并使用Collections.sort()方法或Lambda表达式对它们进行排序。最后,我们可以将排序结果放回新的Map中,或直接将排序结果放回旧的Map中。