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


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

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

  • 相关阅读:
    小条打印机输出简析
    Visual Studio离线安装
    删除“Open in Windows Terminal”右键菜单
    《新媒体营销精华:精准定位+爆款打造+匠心运营+内容变现》笔者的新书,欢迎各位粉丝上京东购买
    vue3.0 的 Composition API 的一种使用方法
    对比传统的Xilinx AMP方案和OPENAMP方案-xapp1078和ug1186【转】
    OpenAMP简介【转】
    git 用法【笔记】
    针对非对称多处理系统实现更简单的软件开发【转】
    内核探测工具systemtap简介【转】
  • 原文地址:https://www.cnblogs.com/skiz/p/2662656.html
Copyright © 2020-2023  润新知