2017-02-18 18 views
2

我想从大文件内容中找到重复字数。有没有使用Java 8流API的最佳方法?Java - 在大文件中重复字数

更新详细

文件格式是逗号分隔值,且文件大小约为4 GB

+1

什么是您的文件格式?而重复的字数,它只是对于输入中的每个单词,发生的次数?要么…? –

回答

1

如果你已经拥有的所有的单词的列表,说List<String> words那么你可以使用这样的:

Map<String, Integer> counts = words.parallelStream(). 
      collect(Collectors.toConcurrentMap(
       w -> w, w -> 1, Integer::sum)); 
5

我不知道是否有最好的方法,它也取决于你没有告诉我们的细节。现在我假设一个文本文件在每行上有许多用空格分隔的单词。一种可能的方法是:

Map<String, Long> result = Files.lines(filePath) 
      .flatMap(line -> Stream.of(line.split(" "))) 
      .collect(Collectors.groupingBy(word -> word, Collectors.counting())); 

我认为将每行分解为单词需要细化;例如,您可能会想要放弃标点符号。以此为出发点,并将其发展成您在特定情况下需要的东西。

编辑:以感谢@ 4castle为灵感,分裂成的话,可以在你这样做的话更喜欢一个lambda方法参考:

Map<String, Long> result = Files.lines(filePath) 
      .flatMap(Pattern.compile(" ")::splitAsStream) 
      .collect(Collectors.groupingBy(word -> word, Collectors.counting())); 

它产生相同的。编辑2:关于优化的废话在这里删除。

也许我们不应该在这里走得太远,直到我们知道每行中定义单词的更确切的要求。

+2

对于初学者来说,split可以是'.flatMap(Pattern.compile(“”):: splitAsStream)' – 4castle