package io;
import facetest.IntArray;
import javax.jws.soap.SOAPBinding;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
/**
* Created by kechunwang on 2020/3/21.
*/
public class Topic11 {
/**
* I/O +集合 +对象
* 文件:位置随意,数据格式:id,name,gender,score,address
* 读取出数据之后,放到对象中的User
* 将User放入集合中
* 集合中的user,按照address、gender分组,且每个组内的分数还要排序
* -- 如:北京,男;上海,女
*
* 基本素质(异常、对象)
* 元素问题:文件位置随意,存储文件格式:id,name,age;读取之后,存入数据库
*/
/**
* 1.读取文件数据
* 2.对数据进行解析
* 3.入库
*/
/**
* 测试:
* - 文件属性问题:
* -- 文件存在性
* -- 文件权限
* -- 文件类型:文本文件、视频文件、图片、二进制
* -- 文件大小:比如,系统如果是2G内存,文件大小是4个G
* --操作系统类型:
* Windows,D:\\xxx\\xxx
* mac,/path/xxx
* linux, /path/xxx
* ubuntu, /path/xxx
* - 文件内容
* - 文件为空
* -空行,跳过去
* -格式不正确
* + , --> .
* + 1或2列
* + 1,2,2,
* + 无换行
* -数据异常
* + abc,jjim,23
* + 1,jim,abc
*
* -程序逻辑问题
* +List,会被干爆,Integer.Max_value
* +List 应该给一个预估值
* + 关流
* + 处理异常
* @param args
*/
public static void main(String[] args) {
/**
* 读取文件
*/
List<String> strings = readFile("");
/**
* 数据解析
*/
List<User> parse = parse(strings);
/**
* 数据根据名字分组
*/
Map<String, List<User>> groupResult = groupByname(parse);
/**
* 排序
*/
Map<String, List<User>> newGroupResult = sort(groupResult);
/**
* 插入数据库
*/
Integer integer = insertDB(parse);
}
/**
* 1.读取文件
* @param path
* @return
*/
private static List<String> readFile(String path) {
BufferedReader reader = null;
List<String> result = new ArrayList<>();
try {
reader = new BufferedReader(new FileReader(""));
String val = null;
while ((val=reader.readLine())!= null){
result.add(val);
}
return result;
}catch (Exception ex){
throw new IllegalStateException(ex);
}finally {
if (null != reader){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 2.对数据进行解析
* @param resultData
* @return
*/
private static List<User> parse(List<String> resultData) {
List<User> users = new ArrayList<>();
for (String data :resultData) {
String[] splitArr = data.split(",");
Integer id = Integer.parseInt(splitArr[0]);
String name = splitArr[1];
Integer age = Integer.parseInt(splitArr[2]);
User user = new User(id, name, age);
users.add(user);
}
return users;
}
private static Map<String,List<User>> groupByname(List<User> users){
Map<String,List<User>> result = new HashMap<>();
for (User user:users){
String userName = user.getName();
if (result.containsKey(userName)){
result.get(userName).add(user);
}else {
List<User> userList = new ArrayList<>();
userList.add(user);
result.put(userName,userList);
}
}
return result;
}
private static Map<String,List<User>> sort(Map<String,List<User>> groupResult){
Map<String,List<User>> result = new HashMap<>();
for (Map.Entry<String,List<User>> entry:groupResult.entrySet()){
String groupName = entry.getKey();
//原始User列表
List<User> users = entry.getValue();
//Arrays.sort();
//排序后User列表
List<User> sortedUsers = sortUser(users);
result.put(groupName,sortedUsers);
}
return result;
}
private static List<User> sortUser(List<User> users){
List<User> result = new ArrayList<>();
for (int i = 0;i < users.size();i++){
for (int j = 0; j < i; j++) {
User u1 = users.get(i);
User u2 = users.get(j);
if (u1.getAge() < u2.getAge()){
users.set(i,u2);
users.set(j,u1);
}
}
}
return users;
}
private static void printGroupResult(Map<String,List<User>> groupResult){
for (Map.Entry<String,List<User>> entry :groupResult.entrySet()){
String groupName = entry.getKey();
List<User> users = entry.getValue();
System.out.println("groupName = " + groupName);
for (User user : users) {
System.out.println("user = " + user);
}
}
}
/**
* 插入数据库
* @param users
* @return
*/
private static Integer insertDB(List<User> users){
return -1;
}
}