Java 9 からは、java.util.regex.Matcher に、待望の
public Stream<MatchResult> results()
が追加されたが、
Java8 のままで同様の Match 結果の Streamを取得するのに、
去年、以下をここに書いた
oboe2uran.hatenablog.com
そして、
https://github.com/yipuran/yipuran-core/tree/master/src/main/java/org/yipuran/regex
を書いたわけだが、、
java.util.Spliterators の spliteratorUnknownSize メソッドでマッチ結果の
Spliterator<String> を取得してStreamSupport で、 Stream 生成する手段もある。
public static Stream<String> patternToStream(Pattern pattern, String target){ Matcher m = pattern.matcher(target); return StreamSupport.stream( Spliterators.spliteratorUnknownSize(new Iterator<String>(){ @Override public boolean hasNext(){ return m.find(); } @Override public String next(){ return m.group(); } }, Spliterator.ORDERED), false); }
以下のように書けるはずだ。
patternToStream(Pattern.compile("[a-z]+"), string).forEach(e->{ System.out.println(e); });
Java9 以降の MatchResult の Stream もそれはそれで使い道もあるが、
単純な match 結果の stream 取得も魅力的に思います。