从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序

public static void main(String[] args) throws IOException {
Map results = new HashMap();
InputStream is = new FileInputStream(new File(
"C:\\Documents and Settings\\Administrator\\桌面\\1.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(is, "gbk"));  //读入文件 防止乱码
String line = null;
while ((line = br.readLine()) != null) {
dealLine(line, results);//封装数据到map中
}
Set s = results.keySet();
List<User> l = sortResults(results);
for (User l1 : l) {
System.out.println(l1.getName() + l1.getNum());
}

}
private static List sortResults(Map map) {
//将map中的值放入list中并反序
List v = new ArrayList<>();
v.addAll(map.values());
Collections.sort(v, Collections.reverseOrder());

Set s = map.keySet();// 取键
boolean b = true;
List m = new ArrayList<>();
//依次取值
for (int i = 0; i < v.size(); i++) {
for (Object o : s) {
//判断map中键的值与之一样的键 若相同则进入
if (map.get(o.toString()) == v.get(i)) {//判断是否已将满足条件的值放入list<USER>中
for (Object t : m) {
if (o.toString() == ((User) t).getName()) {
b = false;
}
}
//若未放入则放入
if (b) {
m.add(new User(o.toString(), (int) v.get(i)));
}
}
}
}
return m;
}

// 把数据封装到map集合中
private static void dealLine(String line, Map map) {
if (!"".equals(line.trim())) {
String[] result = line.split(",");
if (result.length == 3) {
String name = result[1];
Integer value = (Integer) map.get(name);
if (value == null)
value = 0;
map.put(name, value + 1);

}

}

}

}

class User {
private String name;
private int num;

public User(String name, int num) {
super();
this.name = name;
this.num = num;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getNum() {
return num;
}

public void setNum(int age) {
this.num = age;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值