Map<String,Map<String, List<String>>> 按照value中的list数量进行排序,若数量相同则以中文首字母排序排序
时间: 2023-10-14 07:18:03 浏览: 100
对map里面的value进行排序
可以使用Java中的Comparator接口来实现该排序。下面是一个示例代码:
```java
import java.util.*;
import java.text.Collator;
public class SortMapByListSize {
public static void main(String[] args) {
Map<String, Map<String, List<String>>> map = new HashMap<>();
// 假设map已经初始化
List<Map.Entry<String, Map<String, List<String>>>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Map<String, List<String>>>>() {
@Override
public int compare(Map.Entry<String, Map<String, List<String>>> o1, Map.Entry<String, Map<String, List<String>>> o2) {
int diff = o2.getValue().size() - o1.getValue().size();
if (diff != 0) {
return diff;
} else {
String k1 = o1.getValue().keySet().iterator().next();
String k2 = o2.getValue().keySet().iterator().next();
Comparator<Object> cmp = Collator.getInstance(Locale.CHINA);
return cmp.compare(k1, k2);
}
}
});
// 排序后的结果
for (Map.Entry<String, Map<String, List<String>>> entry : list) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
}
```
在此示例代码中,我们首先将Map中的数据转换为List,并使用Collections.sort方法进行排序,其中Comparator的compare方法实现了按照value中的list数量进行排序,若数量相同则以中文首字母排序排序的逻辑。具体实现中,我们通过o2.getValue().size() - o1.getValue().size()比较value中的list数量,并使用Collator.getInstance(Locale.CHINA)创建一个中文比较器,通过cmp.compare(k1, k2)比较value中的key的中文首字母。最后输出排序后的结果。
阅读全文