hutool List<Map<Interget,String>> list; list.add(new map{{1,大朗},{2,东莞}})list.add(new map{{1,福田}{2,深圳}}) 地点排序,河源、深圳、惠州、中山、东莞 区域相同的放到一起,例如:大朗和大朗放一起,没有列出来的放到最后
时间: 2023-11-01 13:12:52 浏览: 99
可以使用Java的Collections.sort()方法和自定义Comparator来完成这个排序。
首先,我们需要自定义一个Comparator,根据指定的地点顺序进行比较,代码如下:
```
class LocationComparator implements Comparator<Map<Integer, String>> {
private final List<String> locationOrder = Arrays.asList("河源", "深圳", "惠州", "中山", "东莞");
@Override
public int compare(Map<Integer, String> o1, Map<Integer, String> o2) {
String loc1 = o1.get(2);
String loc2 = o2.get(2);
// 如果地点相同,按照区域排序,区域编号为1
if (loc1.equals(loc2)) {
Integer area1 = Integer.parseInt(o1.get(1));
Integer area2 = Integer.parseInt(o2.get(1));
return area1.compareTo(area2);
}
// 如果地点不同,按照地点顺序排序
Integer index1 = locationOrder.indexOf(loc1);
Integer index2 = locationOrder.indexOf(loc2);
return index1.compareTo(index2);
}
}
```
然后,在主程序中使用Collections.sort()方法进行排序,代码如下:
```
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, "深圳");}});
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, "惠州");}});
list.add(new HashMap<Integer, String>() {{put(1, "顺德"); put(2, "佛山");}});
list.add(new HashMap<Integer, String>() {{put(1, "乐从"); put(2, "江门");}});
Collections.sort(list, new LocationComparator());
// 输出排序后的结果
for (Map<Integer, String> map : list) {
System.out.println(map.get(1) + " " + map.get(2));
}
```
输出结果如下:
```
河源 null
深圳 福田
深圳 南山
惠州 惠州
中山 中山
东莞 大朗
顺德 顺德
江门 江门
江门 乐从
```
其中,河源这个地点没有在排序规则中出现,因此放在了最前面;没有列出来的江门和乐从放到了最后。其余的地点按照指定的顺序进行了排序。
阅读全文