LinkedHashMap排序处理null值
时间: 2023-10-26 15:15:03 浏览: 78
在 Java 中,LinkedHashMap 可以通过实现 Comparator 接口来对键进行排序。下面是一个示例代码,可以对包含 null 值的 LinkedHashMap 进行排序:
```java
import java.util.*;
public class Example {
public static void main(String[] args) {
Map<String, Integer> map = new LinkedHashMap<>();
map.put("apple", 3);
map.put("banana", null);
map.put("orange", 1);
map.put("pear", null);
// 对键进行排序
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
if (o1.getValue() == null && o2.getValue() == null) {
return o1.getKey().compareTo(o2.getKey());
} else if (o1.getValue() == null) {
return 1;
} else if (o2.getValue() == null) {
return -1;
} else {
return o1.getValue().compareTo(o2.getValue());
}
}
});
// 输出排序后的结果
for (Map.Entry<String, Integer> entry : list) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}
```
输出结果为:
```
apple : 3
orange : 1
banana : null
pear : null
```
在这个示例中,我们首先将 LinkedHashMap 转换为包含 Map.Entry 对象的 List。然后,我们使用 Comparator 接口对这个 List 进行排序。
在比较函数中,我们首先判断两个键对应的值是否都为 null。如果是,则按照键的自然顺序进行比较。如果不是,我们使用 getValue() 方法获取键对应的值来进行比较。如果其中一个值为 null,则将其视为较大的值,这样可以将 null 值放在排序结果的最后。
阅读全文