Last active
August 29, 2015 14:03
-
-
Save bobbyjam99-zz/9f277e13d169f1154cd8 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.BufferedReader; | |
import java.io.Reader; | |
import java.util.Arrays; | |
import java.util.List; | |
import java.util.function.Predicate; | |
import java.util.stream.Collectors; | |
import java.util.stream.IntStream; | |
import java.util.stream.Stream; | |
/** | |
* Java8のStream APIを使ったgrep機能 | |
*/ | |
public class GrepUtil { | |
/** | |
* grep機能 | |
* <p> | |
* 指定された文字列のうちどれか一つでもヒットした行を対象とし、行番号(1オリジン)と行の内容を戻り値に含めます。 | |
* 大文字、小文字は厳格に判定するものする。 | |
* | |
*/ | |
public static Stream<String> grep(Reader reader, String... words) { | |
BufferedReader bufferedReader = new BufferedReader(reader); | |
List<String> readerList = bufferedReader.lines().collect(Collectors.toList()); | |
List<String> indexList = IntStream.range(0, readerList.size()) | |
.mapToObj(i -> (i + 1 + ": " + readerList.get(i))) | |
.collect(Collectors.toList()); | |
Predicate predicate = o -> { | |
List<String> stringList = Arrays.asList(words); | |
// indexを除外してない | |
return stringList.stream().anyMatch(s -> ((String) o).contains(s)); | |
}; | |
return indexList.stream().filter(s -> predicate.test(s)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment