ファイルを解析し、いくつかの基本的なフィルタリングに基づいて結果をコレクションに格納するJavaラムダストリームがあります。異なるコレクションへのJava Lambdaストリーム
私はちょうどラムダを学んでいるので、これはばかげて悪い場合はここで私と一緒にクマ。しかし、私の間違いを指摘してください。指定したファイルについては
:
#ignored
this
is
#ignored
working
fine
コード:
今List<String> matches;
Stream<String> g = Files.lines(Paths.get(givenFile));
matches = g.filter(line -> !line.startsWith("#"))
.collect(Collectors.toList());
["this", "is", "working", "fine"]
、私はこの同じストリーム内の第2のリストに無視行を収集については行くだろうか?以下のようなもの:私は新しいストリームを開くことが非常に簡単になり実現
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());
は、ロジックビット、および.collect()簡単に十分な無視の行を変更します。しかし、私は1つのストリームですべてを行うことができれば、このファイルを2回ループする必要はありません。代わりに、二つの流れの
これは 'g.filter(..)。map(t-> t :: toString))。collect(.. toList())' –
のようなものでなければなりません。最後の例をOracle docs:https: //docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html – Gene