gpt4 book ai didi

java - 使用 LinkedHashSet 时计算出现次数

转载 作者:行者123 更新时间:2023-12-02 08:39:57 25 4
gpt4 key购买 nike

我有一个 XML 文件,我需要在其中查找并计算年份标签的出现次数。例如:

Found year 2020 10 times.
Found year 2017 1 times.
Found year 2019 2 times.
(...)

为了避免重复年份我使用了HashSet。代码:

public class Publications {
public static void main(String[] args) throws IOException {
Set<String> publicationYears = new LinkedHashSet<>();
try (BufferedReader reader = Files.newBufferedReader(Paths.get("dblp-2020-04-01.xml"))) {
Pattern pattern = Pattern.compile("<year>(.+?)</year>", Pattern.DOTALL);
for (String line; (line = reader.readLine()) != null; ) {
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
String year = matcher.group(1);
publicationYears.add(year);
}
}
}

结果:

2010
2002
1992
1994
1993
2006(...)

但是现在我找不到一个高效的代码来统计每年的出现次数。创建一个多维数组然后搜索会非常慢。有什么建议吗?

最佳答案

试试这个:

  • 我用 map 替换了套装。
  • 执行此操作的语句是
        count.compute(year, (k,v)->v == null ? 1 : v + 1); 
  • 如果是第一次遇到的年份,则简单地为该年份添加 1,否则为该年份加 1。
   Map<String, Integer> count = new LinkedHashMap<>();
try (BufferedReader reader = Files.newBufferedReader(Paths.get("dblp-2020-04-01.xml"))) {
Pattern pattern = Pattern.compile("<year>(.+?)</year>", Pattern.DOTALL);
for (String line; (line = reader.readLine()) != null; ) {
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
String year = matcher.group(1);
count.compute(year, (k,v)->v == null ? 1 : v + 1);
}
}
}
}

要打印它们,请执行以下操作

count.entrySet().forEach(System.out::println);

关于java - 使用 LinkedHashSet 时计算出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61440706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com