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

1,张三,28

2,李四,35

3,张三,28

4,王五,35

5,张三,28

6,李四,35

7,赵六,28

8,田七,35

 

程序代码如下:

View Code
  1 import java.io.BufferedReader;
  2 import java.io.IOException;
  3 import java.io.InputStream;
  4 import java.io.InputStreamReader;
  5 import java.util.Comparator;
  6 import java.util.HashMap;
  7 import java.util.Iterator;
  8 import java.util.Map;
  9 import java.util.TreeSet;
 10 
 11 
 12 public class GetNameTest {
 13 
 14     /**
 15      * @param args
 16      */
 17     public static void main(String[] args) {
 18         // TODO Auto-generated method stub
 19         //InputStream ips = GetNameTest.class.getResourceAsStream("/com/huawei/interview/info.txt");
 20         //用上一行注释的代码和下一行的代码都可以,因为info.txt与GetNameTest类在同一包下面,所以,可以用下面的相对路径形式
 21         
 22         Map results = new HashMap();
 23         InputStream ips = GetNameTest.class.getResourceAsStream("info.txt");
 24         BufferedReader in = new BufferedReader(new InputStreamReader(ips));
 25         String line = null;
 26         try {
 27             while((line=in.readLine())!=null)
 28             {
 29                 dealLine(line,results);
 30             }
 31             sortResults(results);
 32         } catch (IOException e) {
 33             // TODO Auto-generated catch block
 34             e.printStackTrace();
 35         }
 36     }
 37     
 38     static class User
 39     {
 40         public  String name;
 41         public Integer value;
 42         public User(String name,Integer value)
 43         {
 44             this.name = name;
 45             this.value = value;
 46         }
 47 
 48         @Override
 49         public boolean equals(Object obj) {
 50             // TODO Auto-generated method stub
 51                 
 52             //下面的代码没有执行,说明往treeset中增加数据时,不会使用到equals方法。
 53             boolean result = super.equals(obj);
 54             System.out.println(result);
 55             return result;
 56         }
 57     }
 58     
 59     private static void sortResults(Map results) {
 60         // TODO Auto-generated method stub
 61         TreeSet sortedResults = new TreeSet(
 62                 new Comparator(){
 63                     public int compare(Object o1, Object o2) {
 64                         // TODO Auto-generated method stub
 65                         User user1 = (User)o1;
 66                         User user2 = (User)o2;
 67                         /*如果compareTo返回结果0,则认为两个对象相等,新的对象不会增加到集合中去
 68                          * 所以,不能直接用下面的代码,否则,那些个数相同的其他姓名就打印不出来。
 69                          * */
 70                         
 71                         //return user1.value-user2.value;
 72                         //return user1.value<user2.value?-1:user1.value==user2.value?0:1;
 73                         if(user1.value<user2.value)
 74                         {
 75                             return -1;
 76                         }else if(user1.value>user2.value)
 77                         {
 78                             return 1;
 79                         }else
 80                         {
 81                             return user1.name.compareTo(user2.name);
 82                         }
 83                     }
 84                     
 85                 }
 86         );
 87         Iterator iterator = results.keySet().iterator();
 88         while(iterator.hasNext())
 89         {
 90             String name = (String)iterator.next();
 91             Integer value = (Integer)results.get(name);
 92             if(value > 1)
 93             {                
 94                 sortedResults.add(new User(name,value));                
 95             }
 96         }
 97         
 98         printResults(sortedResults);
 99     }
100     private static void printResults(TreeSet sortedResults) 
101     {
102         Iterator iterator  = sortedResults.iterator();
103         while(iterator.hasNext())
104         {
105             User user = (User)iterator.next();
106             System.out.println(user.name + ":" + user.value);
107         }    
108     }
109     public static void dealLine(String line,Map map)
110     {
111         if(!"".equals(line.trim()))
112         {
113             String [] results = line.split(",");
114             if(results.length == 3)
115             {
116                 String name = results[1];
117                 Integer value = (Integer)map.get(name);
118                 if(value == null) value = 0;
119                 map.put(name,value + 1);
120             }
121         }
122     }
123 
124 }

 

转载于:https://www.cnblogs.com/Jeanferly/archive/2012/08/08/2628583.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值