Ich möchte die Menge aller Wörter in einer Datei finden.Dieser Satz sollte sortiert werden. Ober- und Kleinschreibung spielt keine Rolle. Hier ist mein Ansatz:Stream von Strings ist nicht sortiert?
public static Set<String> setOfWords(String fileName) throws IOException {
Set<String> wordSet;
Stream<String> stream = java.nio.file.Files.lines(java.nio.file.Paths.get(fileName));
wordSet = stream
.map(line -> line.split("[ .,;?!.:()]"))
.flatMap(Arrays::stream)
.sorted()
.map(String::toLowerCase)
.collect(Collectors.toSet());
stream.close();
return wordSet;
}
Testdatei:
Dies ist eine Datei mit fünf lines.It hat zwei Sätze, und die Word-Datei in mehreren Zeilen dieser Datei enthalten ist. Diese Datei kann zum Testen verwendet werden?
Beim Drucken des Satzes, erhalte ich die folgende Ausgabe:
Set of words:
a
be
in
sentences
testing
this
for
multiple
is
it
used
two
the
can
with
contained
file
and
of
has
lines
five
word
Kann jemand mir sagen, warum der Satz ist nicht sortiert in ihrer natürlichen Ordnung ist (für Streicher lexiographic)?
Vielen Dank im Voraus
Ein Set nicht sortiert ist. Sie müssen dafür ein 'SortedSet' verwenden. – Tunaki
Statt '.map (line -> line.split (" [.,;?!. :()] ")) .flatMap (Arrays :: stream)' können Sie '.map (Pattern.compile ("[.,;?!. :()]")) :: splitAsStream) '. So können Sie das Muster kompilieren nur einmal statt einmal von pro Zeile und vermeiden, dass die Schaffung eines Zwischen Array für jede Zeile ... – Holger