现在的位置: 首页 > 综合 > 正文

Demo8Map典型应用_按要求排序,先按省份的拼音序,每个省份内再按姓名拼音序来排列。

2019年10月11日 ⁄ 综合 ⁄ 共 1614字 ⁄ 字号 评论关闭

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排序,现在就中文存取解决上有点问题,不影响本题的写作意义。

抱歉!评论已关闭.