Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value)。
按键排序(sort by key)
jdk内置的java.util包下的TreeMap<K,V>既可满足此类需求,原理很简单,其重载的构造器之一
有一个参数,该参数接受一个比较器,比较器定义比较规则,比较规则就是作用于TreeMap<K,V>的键,据此可实现按键排序。
public Map<String, String> sortMapByKey(Map<String, String> oriMap) {
if (oriMap == null || oriMap.isEmpty()) {
return null;
}
Map<String, String> sortedMap = new TreeMap<String, String>(new Comparator<String>() {
public int compare(String key1, String key2) {
int intKey1 = 0, intKey2 = 0;
try {
intKey1 = getInt(key1);
intKey2 = getInt(key2);
} catch (Exception e) {
intKey1 = 0;
intKey2 = 0;
}
return intKey1 - intKey2;
}});
sortedMap.putAll(oriMap);
return sortedMap;
}
private int getInt(String str) {
int i = 0;
try {
Pattern p = Pattern.compile("^\\d+");
Matcher m = p.matcher(str);
if (m.find()) {
i = Integer.valueOf(m.group());
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
return i;
}
按值排序(sort by value)
按值排序就相对麻烦些了,貌似没有直接可用的数据结构能处理类似需求,需要我们自己转换一下。
Map本身按值排序是很有意义的,很多场合下都会遇到类似需求,可以认为其值是定义的某种规则或者权重。
本例中先将待排序oriMap中的所有元素置于一个列表中,接着使用java.util.Collections的一个静态方法
来排序列表,同样是用比较器定义比较规则。排序后的列表中的元素再依次被装入Map,需要注意的一点是为了肯定的保证Map中元素与排序后的List中的元素的顺序一致,使用了LinkedHashMap数据类型,虽然该类型不常见,但是在一些特殊场合下还是非常有用的。
引用
分享到:
相关推荐
Java Map按键排序和按值排序 Java Map按键排序和按值排序是Java编程语言中常用的数据结构之一。Map是一种键值对的集合,它可以按照键或值进行排序。下面,我们将详细地介绍Java Map的按键排序和按值排序。 按键...
在给定的代码中,有一个名为`mapSortByKey`的方法,该方法接收一个未排序的`Map, Integer>`作为参数,并返回一个按键排序的`SortedMap, Integer>`。这个方法的关键在于使用了`TreeMap`类,因为`TreeMap`是实现了`...
关于Map的排序,Java 8引入了一个新的API——`Map.Entry`的`comparingByValue()`和`comparingByKey()`方法,这使得我们可以方便地对Map的值或键进行比较和排序。例如,可以使用`map.entrySet().stream().sorted(Map....
这里我们将探讨如何在Java中实现按值排序的Map,特别关注“按值排序”这一需求。 首先,标准的SortedMap接口是根据键(key)进行排序的,例如TreeMap就是一种按键升序排序的实现。因此,如果想按值排序,我们需要...
在本文中,我们将深入探讨如何使用Stream API来按键或值对Map进行排序,以及涉及的一些关键函数和概念。 一、Java 8 Stream API简介 Java 8 Stream API 是一种函数式编程的体现,它允许对集合数据进行一系列操作,...
本文将深入讲解如何使用Stream API对Map进行排序,包括按键排序、按值排序以及使用`merge()`函数处理键值冲突。 首先,让我们了解一下Java 8 Stream的基本概念。Stream API允许我们对集合进行一系列操作,如过滤、...
该方法允许用户使用自定义的排序方法,可以按键进行排序,或者按值进行排序。下面是一个简单的示例代码: ```java Map, Integer> map_Data = new HashMap, Integer>(); map_Data.put("A", 98); map_Data.put("B", ...
本文将深入探讨如何在Java中对Map进行按键排序和按值排序。 首先,让我们了解各种Map实现的特点: 1. **HashMap**:HashMap是最常见的Map实现,它依赖于键的hashCode来存储数据,提供快速的访问速度。然而,...
- 在需要按照特定顺序(如按键排序)遍历时,可以先对键集合进行排序,再进行遍历。 - 如果需要根据特定的键执行某些操作,则该方法非常适合。 #### 3. 利用`entrySet()`遍历 `entrySet()`方法返回一个包含Map中...
Java集合框架大致分为两大类:`Collection` 和 `Map`。 - **Collection**:代表一组对象,其中对象称为元素。`Collection`接口是所有单列集合的根接口,包括`List`、`Set`等。 - **Map**:存储键值对,其中键不能...
### 对Java中Map集合的深入解析 ...通过以上介绍,我们可以看到`Map`集合在Java中的重要性和灵活性。了解这些概念可以帮助开发者更好地利用`Map`来解决问题,并根据具体需求选择最合适的实现方式。
在标准的JDK中,Map接口本身并不支持按值排序,因为它的设计目的是按键排序。但是,通过一些技巧,我们可以实现按值排序。 对于`TreeMap`,我们可以通过创建一个内部类作为Comparator,该Comparator比较键值对的值...
标题中的“Map排序”指的是在Java编程中对Map集合进行排序的操作。Map接口在Java中是一种非常重要的数据结构,它存储键值对(key-value pairs),其中键是唯一的。默认情况下,Map并不保证其元素的顺序,但有些场景下...
总结来说,这个程序利用Java的Map数据结构有效地管理和检索美国的邮政编码信息。通过使用HashMap,可以实现快速的查找和插入操作。文件"postcodes_us.txt"提供原始数据,程序需要读取并解析这些数据,将它们转化为...
本文将深入探讨Java集合框架的四大核心组件:`Collection`、`List`、`Map`和`Set`,以及它们的排序方法。 ### 1. 集合框架概述 #### 1.1.1 容器简介 在Java中,容器(Containers)是用来存储和管理对象的结构。...
- **`TreeMap`**:基于红黑树实现,能自动按键排序,支持范围查询。键按自然顺序或自定义比较器排序。 - **`LinkedHashMap`**:保留了`HashMap`的高效性,同时维护了键值对的插入顺序或访问顺序。 ### List `List`...
无论是按键还是按值排序,都需要根据实际需求选择合适的方法。通过使用`Comparator`接口或自定义比较器,我们可以轻松地实现不同类型的排序操作。这对于处理大量数据时保持数据的有序性非常重要。
对于Map,你可以学习到如何遍历Map以及如何根据键或值进行排序。 `内部类`文件可能详细阐述了内部类的使用场景、优缺点以及如何创建和使用它们。通过学习,你将能够熟练地运用内部类来增强代码的可读性、灵活性和...
总结来说,通过自定义`Comparator`并结合`Arrays.sort()`方法,我们可以对`Map`进行定制化的排序,无论是按值升序排序还是按键排序。但要注意,这种方法只是返回了一个排序后的`Entry`数组,并未改变原`Map`的顺序。...