当前位置: 首页 > 知识库问答 >
问题:

Java8流,以确定文本文件中的最大计数

潘哲
2023-03-14
String filename = "SophieSallyJack.txt";
if (args.length == 1) {
    filename = args[0];
}
Map<String, Integer> wordFrequency = new TreeMap<>();

List<String> incoming = Utilities.readAFile(filename);

wordFrequency = incoming.stream()
    .map(String::toLowerCase)
    .filter(word -> !word.trim().isEmpty())
    .collect(Collectors.toMap(word -> word, word -> 1, (a, b) -> a + b, TreeMap::new));                

int maxCnt = 0;

// TODO add a single statement that uses streams to determine maxCnt
for (String word : incoming) {
    Integer cnt = wordFrequency.get(word);
    if (cnt != null) {
        if (cnt > maxCnt) {
            maxCnt = cnt;
        }
    }
}
System.out.print("Words that appear " + maxCnt + " times:");
wordFrequency = incoming.parallelStream().
    collect(Collectors.toConcurrentMap(w -> w, w -> 1, Integer::sum));

但这是不对的,我不确定如何将maxCnt合并到流中。

共有1个答案

张晔
2023-03-14

假设您已经从列表 中的文件提取了所有单词,可以使用这种方法计算每个单词的单词计数,

Map<String, Long> wordToCountMap = words.stream()
                .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

然后可以使用上面的映射计算最自由的单词,如下所示,

Entry<String, Long> mostFreequentWord = wordToCountMap.entrySet().stream()
    .max(Map.Entry.comparingByValue())
    .orElse(new AbstractMap.SimpleEntry<>("Invalid", 0l));

如果您愿意,您可以将上述两个管道一起更改,

Entry<String, Long> mostFreequentWord = words.stream()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
    .entrySet().stream()
    .max(Map.Entry.comparingByValue())
    .orElse(new AbstractMap.SimpleEntry<>("Invalid", 0l));
Optional<Entry<String, Long>> mostFreequentWord = words.stream()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
    .entrySet().stream()
    .max(Map.Entry.comparingByValue());
 类似资料:
  • 问题内容: 我正在上课的作业,正在寻找一些有用的指示,而不是完整的解决方案。基本上,我必须编写一个Java程序,该程序读取一个文本文件并逐行列出信息,列出行号,最后打印出最大值和最小值以及与每个值相关的年份。文本文件包含一年和该年的温度。因此,它列出了类似“ 1900 50.9”的内容。我不是要使用数组或扫描仪,这是分配的一部分。我已经能够成功地使程序逐行打印并逐行打印出相应的温度。有人告诉我,我

  • 朋友们,我有一段代码,它读取文本文件并搜索匹配的单词,但在搜索文本文件时存在不确定性。有时它能够匹配单词,有时它不能,尽管单词存在于文本文件中。 代码如下: 以下是我的文本文件内容: 有人知道为什么会这样吗?假设我在文本文件中添加一个单词“finish”,然后搜索它,它总会找到它。但是,如果我的搜索词是“dadas”或“dadist”,则在et中生成null。

  • 问题内容: 我想将包含字符串的巨大文件拆分为一组新的(较小)文件,并尝试使用nio2。 我不想将整个文件加载到内存中,因此我尝试了BufferedReader。 较小的文本文件应受文本行数的限制。 该解决方案有效,但是我想问一问,是否有人知道使用usion java 8(也许是带有stream()-api的lamdas)和nio2具有更好的性能的解决方案: 问题答案: 注意/ 及其子类的直接使用与

  • 我正在使用PyCharm社区版2016,我注意到我无法打开大型数据输入文件或日志(20MB)。编辑简单地说“文件XXX太大(大小)”。 不仅如此,似乎没有办法改变限制。官方文档提到了一种增加使用intellisense的最大大小的方法,但根本没有增加可以打开的文件的最大大小。这是真的吗?这真的是一个完全无法打开大型日志的IDE吗?

  • 问题内容: 假设我有一个Java8 ,并且使用了该流,那么如何控制流中使用的s 的关闭? 请注意,我可能无权访问个人,例如: 在进行了其他一些映射等之后,我终于在续集中失去了。 我首先认为垃圾收集器可以在需要时执行此操作,但是当它很长时,我已经经历了OS描述符耗尽。 问题答案: 关于使用FileReader的一般注意事项:FileReader在内部使用FileInputStream,它会覆盖并且因

  • 问题内容: 我用Python打开了一个8 MB的文件,因为我想批量更改各种类型的文件名。我仔细检查并将文件加载到字符串中,然后使用字符串方法replace替换了所有内容。然后我注意到只有一半的文件被替换了。好像Python没有完全打开文件。 我必须在Python的范围内发挥某种字符串大小限制或最大文件大小限制吗? 请参阅Python搜索中的代码并替换未正确替换的代码。 我已更改为建议的代码。缓冲区