読者です 読者をやめる 読者になる 読者になる

JavaのStream APIを触ってみた

読み込んだテキストファイルのうち「#」で始まる行と空行を除外するという処理を、せっかくだからStream APIで実装してみた。

Stream APIを使わなかった場合は以下の通り。

    List<String> result = new ArrayList<>();

    // 対象のテキストファイルを読み込んで、各行の内容を含んだListを受け取る
    List<String> lines = readAllLines();

    for (String line: lines) {
        // #から始まる行は読み飛ばす
        if (line.trim().startsWith("#")) {
            continue;
        }

        // 空行も読み飛ばす
        if (line.trim().length()==0) {
            continue;
        }

        result.add(line);
    }

これがStream APIを使うと以下の通り。

    // 対象のテキストファイルを読み込んで、各行の内容を含んだListを受け取る
    List<String> lines = readAllLines();
    List<String> result = lines.stream()
            .filter(line -> !(line.trim().startsWith("#")))        // #から始まる行は読み飛ばす
            .filter(line -> !(line.trim().length()==0))            // 空行も読み飛ばす
            .collect(Collectors.toList());

実にシンプル。
これは気持ち良いかも。
for文禁止にしたい気持ちが、今更ながらわかってきた。