打印重复姓名和重复次数
2017-10-07 13:23
225 查看
从下面的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序
info.txt
1,张三,28
2,李四,35
3,张三,28
4,王五,35
5,张三,28
6,李四,35
7,赵六,28
8,田七,35
结果;
李四:2
张三:3
代码实现;
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.TreeSet;
public class Test {
@SuppressWarnings("rawtypes")
public static void main(String[] args) {
Map results = new HashMap();
InputStream ips = Test.class.getResourceAsStream("info.txt");
//InputStream ips = GetNameTest.class.getResourceAsStream("/com/huawei/interview/info.txt");
BufferedReader in = new BufferedReader(new InputStreamReader(ips));
String line = null;
try {
while((line=in.readLine())!=null){
dealLine(line,results);
}
sortResults(results);
} catch (IOException e) {
e.printStackTrace();
}
}
static class User{
public String name;
public Integer value;
public User(String name,Integer value){
this.name = name;
this.value = value;
}
public boolean equals(Object obj) {
//下面的代码没有执行,说明往treeset中增加数据时,不会使用到equals方法。
boolean result = super.equals(obj);
System.out.println(result);
return result;
}
}
@SuppressWarnings({ "unchecked", "rawtypes" })
private static void sortResults(Map results) {
TreeSet sortedResults = new TreeSet(
new Comparator(){
public int compare(Object o1, Object o2) {
User user1 = (User)o1;
User user2 = (User)o2;
/* 如果compareTo返回结果0,则认为两个对象相等,新的对象不会增加到集合中去
* 所以,不能直接用下面的代码,否则,那些个数相同的其他姓名就打印不出来。
* */
if(user1.value<user2.value){
return -1;
}else if(user1.value>user2.value){
return 1;
}else{
return user1.name.compareTo(user2.name);
}
}
}
);
Iterator iterator = results.keySet().iterator();
while(iterator.hasNext()){
String name = (String)iterator.next();
Integer value = (Integer)results.get(name);
if(value > 1){
sortedResults.add(new User(name,value));
}
}
printResults(sortedResults);
}
@SuppressWarnings("rawtypes")
private static void printResults(TreeSet sortedResults) {
Iterator iterator = sortedResults.iterator();
while(iterator.hasNext()){
User user = (User)iterator.next();
System.out.println(user.name + ":" + user.value);
}
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void dealLine(String line,Map map){
if(!"".equals(line.trim())){
String [] results = line.split(",");
if(results.length == 3){
String name = results[1];
Integer value = (Integer)map.get(name);
if(value == null) value = 0;
map.put(name,value + 1);
}
}
}
}
info.txt
1,张三,28
2,李四,35
3,张三,28
4,王五,35
5,张三,28
6,李四,35
7,赵六,28
8,田七,35
结果;
李四:2
张三:3
代码实现;
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.TreeSet;
public class Test {
@SuppressWarnings("rawtypes")
public static void main(String[] args) {
Map results = new HashMap();
InputStream ips = Test.class.getResourceAsStream("info.txt");
//InputStream ips = GetNameTest.class.getResourceAsStream("/com/huawei/interview/info.txt");
BufferedReader in = new BufferedReader(new InputStreamReader(ips));
String line = null;
try {
while((line=in.readLine())!=null){
dealLine(line,results);
}
sortResults(results);
} catch (IOException e) {
e.printStackTrace();
}
}
static class User{
public String name;
public Integer value;
public User(String name,Integer value){
this.name = name;
this.value = value;
}
public boolean equals(Object obj) {
//下面的代码没有执行,说明往treeset中增加数据时,不会使用到equals方法。
boolean result = super.equals(obj);
System.out.println(result);
return result;
}
}
@SuppressWarnings({ "unchecked", "rawtypes" })
private static void sortResults(Map results) {
TreeSet sortedResults = new TreeSet(
new Comparator(){
public int compare(Object o1, Object o2) {
User user1 = (User)o1;
User user2 = (User)o2;
/* 如果compareTo返回结果0,则认为两个对象相等,新的对象不会增加到集合中去
* 所以,不能直接用下面的代码,否则,那些个数相同的其他姓名就打印不出来。
* */
if(user1.value<user2.value){
return -1;
}else if(user1.value>user2.value){
return 1;
}else{
return user1.name.compareTo(user2.name);
}
}
}
);
Iterator iterator = results.keySet().iterator();
while(iterator.hasNext()){
String name = (String)iterator.next();
Integer value = (Integer)results.get(name);
if(value > 1){
sortedResults.add(new User(name,value));
}
}
printResults(sortedResults);
}
@SuppressWarnings("rawtypes")
private static void printResults(TreeSet sortedResults) {
Iterator iterator = sortedResults.iterator();
while(iterator.hasNext()){
User user = (User)iterator.next();
System.out.println(user.name + ":" + user.value);
}
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void dealLine(String line,Map map){
if(!"".equals(line.trim())){
String [] results = line.split(",");
if(results.length == 3){
String name = results[1];
Integer value = (Integer)map.get(name);
if(value == null) value = 0;
map.put(name,value + 1);
}
}
}
}
相关文章推荐
- java并打印出重复的姓名和重复的次数,并按重复次数排序
- 从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数
- 从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数
- 面试题:从类似如下的文本文件中读取出所有的姓名,并打印出重复的姓名和重复的次数,并按重复次数排序
- java 集合 从类似如下的文本文件中读取出所有的姓名,并打印出重复的 * 姓名和重复的次数,并按重复次数排序:
- 找出数组中重复次数最多的元素并打印
- 关于字符串的一个简单的习题--输入一个数字,判断是几位数,打印每个数字及其重复的次数,依次打印个位到最高位
- 面试二 打印集合中重复记录 并显示重复次数
- 使用map来进行票数统计工作,循环输入多个人名,作为key存储到map中,对应的value就是该人获得的票数(即重复输入的次数),当重复输入时,需要对相应的数据进行修改。最红输quit结束循环,打印
- 找出数组中重复次数最多的元素并打印
- java面试--(生成随机数,获取重复次数最多,并且数是最大的一个,打印出来)
- 【原创】打印一个string 字符串中重复字符的次数
- 要求查询“"Welcome to Chinaworld"“中重复的字符,不区分大小写,并且打印出来每个字符出现的次数
- java版本: 把手机号码里重复数字出现的次数按从多到少排列打印出来
- 冒泡排序的优化 折半查找法 循环打印三角形 耶稣13门徒找叛徒 有1000000个数,每个数取值范围是0~999999,找出其中重复的数,重复的次数。
- 菜单选择错误后,下面的打印语句重复打印错误次数
- 练手系列(1) 找出数组中重复次数最多的元素并打印
- java实现打印list中重复次数最多的前n个数据
- 关于记录报表打印次数的记录
- 如何找出数组中重复次数最多的数