JAVA 读取文件内容并区分排序_读取文件中内容并统计排序

从类似如下的文本文件中读取出所有的姓名,并打印出

重复的姓名和重复的次数,并按重复次数排序:

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值