文件数据读取,并按时间取最新结果(分组排序)
背景:
今天项目遇到一类场景,跟大家分享下解题过程:已知文件中一组数据如下:
| id | user | address | time |
| 1 | 张三 | 福建省漳州市龙海区 | 2018-05-05 |
| 2 | 张三 | 福建省福州市闽侯县 | 2018-05-06 |
| 3 | 李四 | 浙江省温州市苍南县 | 2018-05-07 |
| 4 | 王五 | 上海市松江区 | 2018-05-03 |
要求以user字段分组,并按time倒序,求出每人最新的结果。
分析思路:
1.文件读取
private static List<Map<String, String>> readDataFromFile(File file) { List<Map<String, String>> mapRes = new ArrayList<>(); String[] titles = new String[]{"id", "user", "address", "time"}; try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8))) { boolean firstLine = true; String data; while (null != (data = br.readLine())) { if (firstLine) { firstLine = false; continue; } String[] split = data.split("\\t"); Map<String, String> map = new HashMap<>(); for (int i = 0; i < split.length; i++) { map.put(titles[i], split[i]); } mapRes.add(map); } } catch (Exception e) { e.printStackTrace(); } return mapRes; }
2.数据排序:
private static void orderData(List<Map<String, String>> params) {
Map<String, Map<String, String>> mapRes = new HashMap<>();
for (Map<String, String> item : params) {
if (mapRes.get("user") == null) {
mapRes.put(item.get("user"), item);
} else if (getTimeStemp(mapRes.get("user").get("time")) < getTimeStemp(item.get("time"))) {
mapRes.put(item.get("user"), item);
}
}
}
private static long getTimeStemp(String time) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
long timeStemp = 0L;
try {
Date date = simpleDateFormat.parse(time);
timeStemp = date.getTime();
} catch (Exception e) {
e.printStackTrace();
}
return timeStemp;
}

浙公网安备 33010602011771号