Skip to content

Instantly share code, notes, and snippets.

@bobbyjam99-zz
Last active August 29, 2015 14:03
Show Gist options
  • Save bobbyjam99-zz/9f277e13d169f1154cd8 to your computer and use it in GitHub Desktop.
Save bobbyjam99-zz/9f277e13d169f1154cd8 to your computer and use it in GitHub Desktop.
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