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()にそれっぽく書くということで。