7 votes

Compter tous les mots dans un fichier en utilisant les flux Java

J'essayais de compter le nombre de mots uniques dans un fichier texte. Pour simplifier, le contenu actuel de mon fichier est :

Ceci est un fichier d'exemple

Ma tentative est la suivante :

long wordCount = 
    Files.lines(Paths.get("sample.txt"))
         .map(line -> line.split("\\s+"))
         .distinct()
         .count();
System.out.println(wordCount);

Cela compile et s'exécute correctement, mais cela donne 1, alors que cela devrait être 5.

12voto

Eran Points 35360

Vous mappez chaque ligne vers un tableau (transformant un Stream en un Stream, puis comptez le nombre d'éléments du tableau (c'est-à-dire le nombre de lignes dans le fichier).

Vous devriez utiliser flatMap pour créer un Stream de tous les mots dans le fichier, et après les opérations distinct() et count(), vous obtiendrez le nombre de mots distincts.

long wordCount = 
    Files.lines(Paths.get("sample.txt"))
         .flatMap(line -> Arrays.stream(line.split("\\s+")))
         .distinct()
         .count();

7voto

nullpointer Points 1135

Il semble que vous comptez les lignes dans votre fichier au lieu de :

map(line -> line.split("\\s+")) // c'est un Stream

Vous devez ensuite utiliser Stream.flatMap comme suit :

long wordCount = Files.lines(Paths.get("sample.txt"))
        .map(line -> line.split("\\s+"))
        .flatMap(Arrays::stream)
        .distinct()
        .count();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X