读取文件中内容并统计排序

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

1,张三,28
2,里斯,24
3,里斯,24
4,收到,42
5,收到,42
6,王五,42
7,赵六,24
8,赵六,24
9,赵六,24
10,赵六,24
11,田七,72
12,田七,72
13,田七,72

 使用map来过滤重复的元素,并实现统计功能

然后使用TreeSet来实现排序功能

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.Map.Entry;


public class TestGetNameSort {
	public void getSrc() throws IOException{
		InputStream is=TestGetNameSort.class.getResourceAsStream("a.txt");
		BufferedReader in = new BufferedReader(new InputStreamReader(is));
		Map<String, Integer> map = new HashMap<String, Integer>();
		String buf;
		while((buf = in.readLine())!=null){
			String[] str = buf.split(",");
			if(str.length==3){
				Integer value = map.get(str[1]);
				if(value == null)
					value=0;
				map.put(str[1], value+1);
			}
		}
		is.close();
		in.close();
		TreeSet<Person> ts = new TreeSet<Person>(new Comparator<Object>() {
			@Override
			public int compare(Object o1, Object o2) {
				Person p1 = (Person)o1;
				Person p2 = (Person)o2;
				if(p1.getTimes()>p2.getTimes())
					return 1;
				if(p1.getTimes()<p2.getTimes())
					return -1;
				else
					return p1.getName().compareTo(p2.getName());//如果相等,这里将不会加入到集合
			}
		});
		Set<Entry<String,Integer>> entrySet = map.entrySet();
		for (Entry<String, Integer> entry : entrySet) {
			String name=entry.getKey();
			int times  =entry.getValue();
			Person p = new Person(name,times);
			ts.add(p);
		}
		for (Iterator<Person> iterator = ts.iterator(); iterator.hasNext();) {
			Person object = (Person) iterator.next();
			if(object.getTimes()>1)
				System.out.println(object.getName()+" "+object.getTimes());
		}
	}
	public static void main(String[] args) throws IOException {
		TestGetNameSort tst = new TestGetNameSort();
		tst.getSrc();
		
	}
}

 特别注意一点就是,Set集合中不允许相同的元素存在,所以在重载Comparator时如果返回0,将不会加入到集合中.

转载于:https://www.cnblogs.com/skiz/archive/2012/08/29/2662656.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值