【发布时间】:2020-03-03 15:40:02
【问题描述】:
我正在尝试计算文本文件中所有日期的频率。日期存储在 parsed.get(0) 中,但是当我打印频率时,我得到这个输出:
1946-01-12: 1
1946-01-12: 1
1946-01-12: 1
1946-01-13: 1
1946-01-13: 1
1946-01-13: 1
1946-01-14: 1
1946-01-14: 1
1946-01-14: 1
1946-01-15: 1
而不是
1946-01-12: 3
1946-01-13: 3
1946-01-14: 3
1946-01-15: 1
我想这是因为我必须存储日期,例如 ("1946-01-12"、"1946-01-12"、"1946-01-12"、"1946-01-12"、"1946 -01-13”,“1946-01-13”,...)。如果我只是打印 parsed.get(0) 我得到
1946-01-12
1946-01-12
1946-01-12
1946-01-13
1946-01-13
1946-01-13
1946-01-14
1946-01-14
1946-01-14
1946-01-15`
如何根据下面的代码解决它?
private static List<WeatherDataHandler> weatherData = new ArrayList<>();
public void loadData(String filePath) throws IOException {
//Read all data
List<String> fileData = Files.readAllLines(Paths.get("filePath"));
System.out.println(fileData);
for(String str : fileData) {
List<String> parsed = parseData(str);
LocalDate dateTime = LocalDate.parse(parsed.get(0));
WeatherDataHandler weather = new WeatherDataHandler(dateTime, Time, temperature, tag);
weatherData.add(weather);
List<String> list = Arrays.asList(parsed.get(0));
Map<String, Long> frequencyMap =
list.stream().collect(Collectors.groupingBy(Function.identity(),
Collectors.counting()));
for (Map.Entry<String, Long> entry : frequencyMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
【问题讨论】:
-
你在逐行数数!
-
如何将所有日期存储在一行中?
-
创建一个字符串到整数的映射。遍历列表以将字符串添加到地图中。如果 String 已经存在,则将 Integer 加 1。否则,将 String 和 1 添加到地图中。
-
如果您想将日期存储在一行中,您只需将日期与某种分隔符并排放置,例如
date : date : date或date | date | date。但是,如果您已经将日期放在单独的行上,则没有必要,因为每行已经充当分隔符。你只需要修改你的内部循环逻辑来解决它。
标签: java arrays list count frequency