如何在 Java 中按值排序 Map

您所在的位置:网站首页 hashmap排序方法 如何在 Java 中按值排序 Map

如何在 Java 中按值排序 Map

2024-07-10 16:26| 来源: 网络整理| 查看: 265

在 Java 中使用 sort() 方法对一个 Map 进行排序 在 Java 中使用 sorted() 方法对 Map 进行排序 在 Java 中使用 Comparator 的 sort() 方法对 Map 进行排序 使用 Java 中的 sorted() 和 toMap() 方法对一个 Map 进行排序 在 Java 中使用自定义代码对一个 Map 进行排序

本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

有几种方法可以对 Map 进行排序。这里我们用到了 sort()、sorted() 方法和 Comparator 接口等。我们来看看例子。

在 Java 中使用 sort() 方法对一个 Map 进行排序

我们可以使用 List 接口的 sort() 方法对 Map 的元素进行排序。sort() 方法将元素按升序排序,我们通过 comparingByValue() 方法指定按值排序。请看下面的例子。

import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; public class SimpleTesting { public static void main(String[] args) { Map map = new HashMap(); map.put(2, 1020); map.put(3, 300); map.put(1, 100); map.put(5, 500); map.forEach((k, v) -> System.out.println(k + "=" + v)); System.out.println("After Sorting by value"); List list = new ArrayList(map.entrySet()); list.sort(Entry.comparingByValue()); list.forEach(System.out::println); } }

输出:

1=100 2=1020 3=300 5=500 After Sorting 1=100 3=300 5=500 2=1020 在 Java 中使用 sorted() 方法对 Map 进行排序

如果你正在使用流,你可以使用 sorted() 方法,按升序对元素进行排序。我们将 Map.Entry.comparingByValue() 作为参数传递给 sorted() 方法,以按值对 Map 进行排序。

import java.util.HashMap; import java.util.Map; import java.util.stream.Stream; public class SimpleTesting { public static void main(String[] args) { Map map = new HashMap(); map.put(2, 1020); map.put(3, 300); map.put(1, 100); map.put(5, 500); map.forEach((k, v) -> System.out.println(k + "=" + v)); System.out.println("After Sorting by value"); Stream sorted = map.entrySet().stream().sorted(Map.Entry.comparingByValue()); sorted.forEach(System.out::println); } }

输出:

1=100 2=1020 3=300 5=500 After Sorting by value 1=100 3=300 5=500 2=1020 在 Java 中使用 Comparator 的 sort() 方法对 Map 进行排序

在这个例子中,我们使用 compareTo() 方法来比较 sort() 方法内部的 Map 的值作为参数。你可以看到,我们创建了一个 Comparator 接口的匿名内类,并定义了 compare() 方法来比较这些值。

import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; public class SimpleTesting { public static void main(String[] args) { Map map = new HashMap(); map.put(2, 1020); map.put(3, 300); map.put(1, 100); map.put(5, 500); map.forEach((k, v) -> System.out.println(k + "=" + v)); System.out.println("After Sorting by value"); List list = new LinkedList(map.entrySet()); Collections.sort(list, new Comparator() { @SuppressWarnings("unchecked") public int compare(Object o1, Object o2) { return ((Comparable) ((Map.Entry) (o1)).getValue()) .compareTo(((Map.Entry) (o2)).getValue()); } }); Map result = new LinkedHashMap(); for (Iterator it = list.iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); result.put(entry.getKey(), entry.getValue()); } result.forEach((k, v) -> System.out.println(k + "=" + v)); } }

输出:

1=100 2=1020 3=300 5=500 After Sorting by value 1=100 3=300 5=500 2=1020 使用 Java 中的 sorted() 和 toMap() 方法对一个 Map 进行排序

在这个例子中,我们使用 sorted() 方法对 Map 进行排序,并使用 toMap() 方法将结果收集到 LinkedHashMap 中。在这里,我们使用方法引用的概念来创建一个 LinkedHashMap 对象。

import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import java.util.stream.Collectors; public class SimpleTesting { public static void main(String[] args) { Map map = new HashMap(); map.put(2, 1020); map.put(3, 300); map.put(1, 100); map.put(5, 500); map.forEach((k, v) -> System.out.println(k + "=" + v)); System.out.println("After Sorting by value"); Map result = map.entrySet() .stream() .sorted(Entry.comparingByValue()) .collect(Collectors.toMap(Entry::getKey, Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); result.forEach((k, v) -> System.out.println(k + "=" + v)); } }

输出:

1=100 2=1020 3=300 5=500 After Sorting by value 1=100 3=300 5=500 2=1020 在 Java 中使用自定义代码对一个 Map 进行排序

在这里,我们创建了一个实现 Comparator 接口的用户自定义类,并将其对象传递给 TreeMap,以获得按值排序的 Map。

import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; class UserComparator implements Comparator { Map map; public UserComparator(Map map) { this.map = map; } public int compare(Object o1, Object o2) { if (map.get(o2) == map.get(o1)) return 1; else return ((Integer) map.get(o1)).compareTo((Integer) map.get(o2)); } } public class SimpleTesting { public static void main(String[] args) { Map map = new HashMap(); map.put(2, 1020); map.put(3, 300); map.put(1, 100); map.put(5, 500); map.forEach((k, v) -> System.out.println(k + "=" + v)); System.out.println("After Sorting by value"); UserComparator comparator = new UserComparator(map); Map result = new TreeMap(comparator); result.putAll(map); result.forEach((k, v) -> System.out.println(k + "=" + v)); } }

输出:

1=100 2=1020 3=300 5=500 After Sorting by value 1=100 3=300 5=500 2=1020


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3