package cn.itcast.map;
/**
* 某个文本文件中存储如下格式信息:
张小兵 北京
胡进 河北
将达民 四川
高力 河北
卢刊令 北京
....
读入这个文件,要求输出内容为:
北京:
卢刊令
张小兵
河北:
高力
胡进
四川:
将达民
*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class MapSort {
public enum provinceEnum {
北京, 河北, 四川;
}
// public enum nameEnum {
// 卢刊令, 张小兵, 高力, 胡进, 将达民;
// }
public static void main(String[] args) {
Map<String, String> maps = new HashMap<String, String>();
maps.put("张小兵", "北京");
maps.put("胡进", "河北");
maps.put("将达民", "四川");
maps.put("高力 ", "河北");
maps.put("卢刊令 ", "北京");
// 排序前的输出
Set set = maps.entrySet();
Iterator iter = set.iterator();
while (iter.hasNext()) {
Map.Entry<String, String> entry1 = (Map.Entry<String, String>) iter
.next();
System.out.println(entry1.getKey() + "-------->"
+ entry1.getValue());
}
System.out.println("----------------");
// 排序后的输出
List<Map.Entry<String, String>> info = new ArrayList<Map.Entry<String, String>>(
maps.entrySet());
Collections.sort(info, new Comparator<Map.Entry<String, String>>() {
public int compare(Map.Entry<String, String> obj1,
Map.Entry<String, String> obj2) {
int x = obj1.getValue().compareTo(obj2.getValue());
if (x != 0)
return x;
else
return obj1.getKey().compareTo(obj2.getKey());
}
});
for (int i = 0; i < provinceEnum.values().length; i++) {
// 输出对应枚举的省份
System.out.println(provinceEnum.values()[i].toString() + ":");
for (int j = 0; j < info.size(); j++) {
String x = info.get(j).getValue();
if (provinceEnum.values()[i].toString().equals(x)) {
//
System.out.println(" |--" + info.get(j).getKey());
}
}
}
}
}
//这里的省份信息我用的是枚举,而姓名我采用的是字符串比较Compareto,
这节处理Map排序,我这里实现的是Map的Value排序,现在就中文存取解决上有点问题,不影响本题的写作意义。