从类似如下的文本文件中读取出所有的姓名,并打印出
重复的姓名和重复的次数,并按重复次数排序:
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 map = new HashMap();
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 ts = new TreeSet(new Comparator() {
@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()
return -1;
else
return p1.getName().compareTo(p2.getName());//如果相等,这里将不会加入到集合
}
});
Set> entrySet = map.entrySet();
for (Entry entry : entrySet) {
String name=entry.getKey();
int times =entry.getValue();
Person p = new Person(name,times);
ts.add(p);
}
for (Iterator 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,将不会加入到集合中.