先日と同じことではあるが、、
Matcher の find() と group() (2) - Oboe吹きプログラマの黙示録
ReturnalConsumer の使いどころとして、、
https://github.com/yipuran/yipuran-core/wiki#returnalconsumert
String str = "aaa134_cd45_def"; String res = ReturnalConsumer.of(Matcher.class).with(Matcher::find).get(Pattern.compile("\\d+").matcher(str)).group();
この結果は、res = "134" である。
課題:"aaa_3", "bbb_12", "ccc", "ddd_32zz", "eee_7" という文字列のリストで、末尾が、"_"+数 の
中で最大値を求める。
Pattern taildec = Pattern.compile("^.+_\\d+$"); Pattern decp = Pattern.compile("_\\d+$"); Integer max = List.of("aaa_3", "bbb_12", "ccc", "ddd_32zz", "eee_7") .stream().filter(e->taildec.matcher(e).matches()) .map(e->ReturnalConsumer.of(Matcher.class).with(Matcher::find).get(decp.matcher(e)).group().substring(1)) .map(Integer::parseInt) .max(Comparator.naturalOrder()).get();
これで結果、Integer max の値は 12 である。
もし、末尾が、"_"+数 の要素が存在しないリストを
考慮するなら、、
.max(Comparator.naturalOrder()).get();
の部分は、
.max(Comparator.naturalOrder()).orElse(null);
にする必要があり、 Integer 型を結果にすべきである。