java8でgrep

どこかのページでこんな課題を見かけたので作ってみる。
単純な文字列検索で可、
行番号も出力する、
forやwhile、ifなどの制御構文は使用不可という前提で。

String[] args = new String[] {"stream", "pair"};
Stream<Integer> count = Stream.iterate(1, i -> i + 1);
Stream<String> lines = Files.lines(Paths.get("Hoge.java"));
Stream<Pair<Integer, String>> pairs = zip(count, lines);
pairs.filter(pair -> Arrays.stream(args).anyMatch(keyword -> pair.right.indexOf(keyword) >= 0)).forEach(System.out::println);

Pairクラスとzipメソッドはこちらを参考にさせていただきました。


出力する時のフォーマットはPairクラスのtoString()にそれっぽく書くということで。