JavaメソッドがFunction<? super T, ? extends U>
を受け入れる場合、次のような構文でメソッド参照を提供することができます:MyClass::myMethod
。ラムダ関数の連鎖
しかし、複数のメソッド呼び出しを連鎖させる方法があるかどうかは疑問です。 この例を示す例です。
// on a specific object, without lambda
myString.trim().toUpperCase()
これをラムダ式に変換する構文があるのだろうかと思います。
// something like: (which doesn't work)
String::trim::toUpperCase
また、関数をマージするユーティリティクラスはありますか?実際の例では、trim
方法は、任意の入力をとらないので、String::trim
がコンパイルされませんので、それがないことを
UnaryOperator<String> trimFunction = String::trim;
UnaryOperator<String> toUpperCaseFunction = String::toUpperCase;
Stream.of(" a ", " b ").map(trimFunction.andThen(toUpperCaseFunction)) // Stream is now ["A", "B"]
注:
// example: (which does not exist)
FunctionUtil.chain(String::trim, String::toUpperCase);
['Function.andThen'](https://docs.oracle.com/javase/8/docs/api/java/util/function/Function.html#andThen-java.util.function.Function - )? –
標準的な解決法はメソッド参照を使用して_停止し、 'myString - > myString.trim()。toUpperCase()'と書くだけです。 –
@LouisWassermanは優れた回避策です。しかし、私は本当により構文的な甘さを期待していました。 – bvdb