先日、Java11 の String の strip と isBlank が便利で、Wicket を使う時に
楽になることを書きました。
oboe2uran.hatenablog.com
でもこのラムダの記述をメソッド参照で書けないかと再興しました。
元ソース
final TextField<String> itemField = new TextField<>("item", new Model<>()); String s = Optional.ofNullable(itemField.getModelObject()) .map(e->e.strip()) .filter(e->!e.isBlank()) .orElseThrow(()->new Exception("input must requre !"));
まず、strip の部分、、、
String s = Optional.ofNullable(itemField.getModelObject()) .map(String::strip) .filter(e->!e.isBlank()) .orElseThrow(()->new Exception("input must requre !"));
isBlank をメソッド参照で書いた時の否定の書き方で、
.filter( !String::sBlank )
という書き方はできません。
Predicate の not() スタティックメソッドで被せるしか方法がないようです。
String s = Optional.ofNullable(itemField.getModelObject()) .map(String::strip) .filter(Predicate.not(String::isBlank)) .orElseThrow(()->new Exception("input must requre !"));
なぜそこまで、メソッド参照にすることに拘るかというと、ラムダ式の中でこれを書くときにラムダ変数の記述が
増えるのを避けたいです。
実際、新しいWicket を使っていると
queue(new Button("submit").add(AjaxFormSubmitBehavior.onSubmit("click", t->{ // submit 時の処理 })));
を良く書くわけで、このラムダの中にまたラムダ文を書いてラムダ変数が増えてるのがカッコ悪いかもしれないのです。