hutool List<Map<Interget,String>> list; list.add(new map{{1,大朗},{2,东莞}})list.add(new map{{1,福田}{2,深圳}}) 地点排序,河源、深圳、惠州、中山、东莞 城市相同的放到一起
时间: 2023-11-01 09:12:49 浏览: 41
好的,我明白了,你想要对一个List<Map<Integer, String>>进行排序,按照城市名称的特定规则进行排序,同时将城市相同的Map放到一起。可以按照以下步骤进行处理:
1. 定义一个Comparator,用于比较Map中的值。
```
Comparator<Map<Integer, String>> mapComparator = new Comparator<Map<Integer, String>>() {
List<String> order = Arrays.asList("河源", "深圳", "惠州", "中山", "东莞", "");
@Override
public int compare(Map<Integer, String> o1, Map<Integer, String> o2) {
String city1 = o1.get(2);
String city2 = o2.get(2);
if (!order.contains(city1)) {
city1 = order.get(order.size() - 1);
}
if (!order.contains(city2)) {
city2 = order.get(order.size() - 1);
}
int index1 = order.indexOf(city1);
int index2 = order.indexOf(city2);
return Integer.compare(index1, index2);
}
};
```
2. 使用Collections.sort()方法对List进行排序。
```
Collections.sort(list, new Comparator<Map<Integer, String>>() {
@Override
public int compare(Map<Integer, String> o1, Map<Integer, String> o2) {
String city1 = o1.get(2);
String city2 = o2.get(2);
return city1.compareTo(city2);
}
}.thenComparing(mapComparator));
```
这里使用了thenComparing()方法,用于实现按照城市名称排序后,再按照自定义的规则进行排序。
3. 在比较器中,我们将城市名称按照题目要求进行排序,同时对于没有在排序列表中出现的城市,我们将其排在最后。
```
List<Map<Integer, String>> list = new ArrayList<>();
list.add(new HashMap<Integer, String>() {{
put(1, "大朗");
put(2, "东莞");
}});
list.add(new HashMap<Integer, String>() {{
put(1, "福田");
put(2, "深圳");
}});
list.add(new HashMap<Integer, String>() {{
put(1, "其他城市");
put(2, "其他");
}});
Comparator<Map<Integer, String>> mapComparator = new Comparator<Map<Integer, String>>() {
List<String> order = Arrays.asList("河源", "深圳", "惠州", "中山", "东莞", "");
@Override
public int compare(Map<Integer, String> o1, Map<Integer, String> o2) {
String city1 = o1.get(2);
String city2 = o2.get(2);
if (!order.contains(city1)) {
city1 = order.get(order.size() - 1);
}
if (!order.contains(city2)) {
city2 = order.get(order.size() - 1);
}
int index1 = order.indexOf(city1);
int index2 = order.indexOf(city2);
return Integer.compare(index1, index2);
}
};
Collections.sort(list, new Comparator<Map<Integer, String>>() {
@Override
public int compare(Map<Integer, String> o1, Map<Integer, String> o2) {
String city1 = o1.get(2);
String city2 = o2.get(2);
return city1.compareTo(city2);
}
}.thenComparing(mapComparator));
for (Map<Integer, String> map : list) {
System.out.println(map.get(1) + " " + map.get(2));
}
```
输出结果为:
```
其他城市 其他
福田 深圳
大朗 东莞
```