[英]What would a compose method in the BiFunction interface look like?
Function
的Compose()
和andThen()
方法很簡單,因為Function
有一個輸入和一個 output,因此只能以兩種方式與另一個按順序串聯。
由於BiFunction
有一個 output,“之后”function 必須是只有一個對應輸入的東西,而Function
符合要求。 因為它有兩個輸入,所以“之前”的 function 需要有兩個輸出嗎? 你不能讓一個方法返回兩個東西,所以似乎不能有一個“之前”。 這些方法中的每一個的返回類型都與它們在其中定義的接口相同,因此建議的方法應該返回一個BiFunction
。
那么我的建議是一種將兩個Function
作為輸入並返回一個BiFunction
的方法。 我不確定它還能是什么。 它不能是兩個BiFunction
,因為返回類型必須是QuaterFunction
。
這是將在 Java 庫中編寫的代碼:
public interface BiFunction<T, U, R> {
// apply()...
default <V, W> BiFunction<V, W, R> compose(
Function<? super V, ? extends T> beforeLeft,
Function<? super W, ? extends U> beforeRight) {
Objects.requireNonNull(beforeLeft);
Objects.requireNonNull(beforeRight);
return (V v, W w) -> apply(beforeLeft.apply(v), beforeRight.apply(w));
}
// andThen()...
}
這是完成的圖表:
這是在使用中:
BiFunction<Integer, Integer, Integer> add = Integer::sum;
Function<Integer, Integer> abs = Math::abs;
BiFunction<Integer, Integer, Integer> addAbs = add.compose(abs, abs);
System.out.println(addAbs.apply(-2, -3));
// output: 5
如果你想實際測試這個,你可以這樣做:
public interface BiFunctionWithCompose<T, U, R> extends BiFunction<T, U, R> {...
或者像這樣:
package myutil;
public interface BiFunction<T, U, R> extends java.util.function.BiFunction<T, U, R> {...
我不知道這是否對任何人都有用,但思考和寫作真的很有趣。 祝你有美好的一天。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.