package com.tulun;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
/**
* 描述:一个文本文件记录了1000条数据[数据内容需自己初始化产生]。数据内容为部分用户的银行卡消费记录,消费记录信息包含([姓名] [消费金额]),找出消费次数最多的用户,并且该用户单笔消费最高的金额是多少?
例:文件内容格式
张三,666
李四,7893
张三,9999
获取结果则为:张三消费次数最多,最高消费金额为:9999
/**
* 初始化文件内容:数据内容为用户的银行卡消费记录,消费记录信息包含([姓名] [消费金额])
* 要求:用户列表中的用户出现次数随机,消费金额信息随机,总数据条数1000条
* @param filePath:文件名路径
* @param userLists:用户列表
*/
*
* @author ASUS
* @date 2018年8月3日
*/
public class TestGY {
/**
* @param args
*/
//初始化文件内容
public static void initFile(String filePath, List<String> userLists) {
File file = new File(filePath);
if (userLists.size() < 1) {
System.out.println("用户列表不能为空");
return;
}
try {
FileWriter writer = new FileWriter(file);
int size = userLists.size();
Random random = new Random();
for (int i = 0; i < 1000; i++) {
StringBuffer buffer = new StringBuffer();
//往空字符串中追加人名,通过list集合的get(index)返回list集合的元素
buffer.append(userLists.get(random.nextInt(size)));
buffer.append(",");
//往同一个字符串中追加消费金额
buffer.append(random.nextInt(1000));
buffer.append("\r\n");
writer.write(buffer.toString());
}
writer.write("null");
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void addName(String filePath) {
ArrayList <String> userlist = new ArrayList <String>();
userlist.add("demacia");
userlist.add("ionia");
userlist.add("noxus");
initFile(filePath, userlist);
}
public static void searchUser(String filePath) {
try {
FileReader reader = new FileReader(filePath);
BufferedReader br = new BufferedReader(reader);
String maxName = null;
String str = null;
// key是名字 list里面放该用户每次消费的金额 list.size该用户出现的次数
HashMap<String, List<Integer>> map = new HashMap<>();
while(!(str = br.readLine()).equals("null")) {
String[] split = str.split(",");
String name = split[0];
Integer money = Integer.valueOf(split[1]);
if(map.containsKey(name)) {
//如果map容器内出现过某个用户的处理流程
List<Integer> list = map.get(name);
list.add(money);
map.put(name, list);
}else{
//如果map容器内出现过某个用户的处理流程
ArrayList <Integer> integers = new ArrayList <Integer>();
integers.add(money);
map.put(name,integers );
}
}
/* list.size表示该用户消费的次数
*
*/
Iterator<Map.Entry<String,List<Integer>>> iterator = map.entrySet().iterator();
Integer num = 0;
while(iterator.hasNext()) {
Map.Entry<String,List<Integer>> next = iterator.next();
String name1 = next.getKey();
List<Integer> moneyNum = next.getValue();
if(moneyNum.size()>num) {
num = moneyNum.size();
maxName = name1;
}
}
System.out.println("消费次数最多的用户是:"+maxName);
/*
* 通过遍历消费次数最多的的那个用户的消费记录,
* 寻找出消费次数最多的的那个用户的消费金额最大的那次
*/
List<Integer> list2 = map.get(maxName);
Iterator<Integer> iterator1 = list2.iterator();
Integer maxMoney = 0;
while(iterator1.hasNext()) {
Integer next = iterator1.next();
if(next > maxMoney ) {
maxMoney = next;
}
}
System.out.println("消费次数最多的用户消费金额最多一次是:"+maxMoney);
br.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String filePath = "D:/initfile.txt";
addName( filePath);
searchUser(filePath);
}
}