2017-02-18 47 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