Ich habe einen Java-Lambda-Stream, der eine Datei analysiert und die Ergebnisse basierend auf einer einfachen Filterung in einer Sammlung speichert.Java Lambda-Stream in verschiedene Sammlungen
Ich lerne nur Lambdas, also ertragen Sie mit mir hier, wenn das lächerlich schlecht ist. Aber zögern Sie nicht, auf meine Fehler hinzuweisen.
Für eine bestimmte Datei:
#ignored
this
is
#ignored
working
fine
Der Code:
List<String> matches;
Stream<String> g = Files.lines(Paths.get(givenFile));
matches = g.filter(line -> !line.startsWith("#"))
.collect(Collectors.toList());
["this", "is", "working", "fine"]
Nun, wie würde ich mich über die ignorierten Zeilen in einer zweiten Liste in diesem gleichen Strom zu sammeln? Etwas wie:
List<String> matches;
List<String> ignored; // to store lines that start with #
Stream<String> g = Files.lines(Paths.get(exclusionFile.toURI()));
matches = g.filter(line -> !line.startsWith("#"))
// how can I add a condition to throw these
// non-matching lines into the ignored collection?
.collect(Collectors.toList());
ich es erkennen würde ziemlich trivial sein, einen neuen Stream zu öffnen, verändern die Logik ein wenig, und .collect() die ignorierten Linien leicht genug. Aber ich möchte diese Datei nicht zweimal durchlaufen müssen, wenn ich alles in einem Stream machen kann.
Es muss etwas wie 'g.filter (..). Map (t-> t :: toString)) sein. Collect (.. toList())' –
Siehe das letzte Beispiel in der Oracle-Dokumentation: https: //docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html – Gene