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

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

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,将不会加入到集合中.

posted on 2012-08-29 21:03  mathore  阅读(414)  评论(0编辑  收藏  举报