sjne:
以下の方法を考えます
public int calcSum(List<MyClass> items) {
return items.stream()
.mapToInt(i -> i.getHeight())
.sum();
}
私は同じreturn文を繰り返す必要がないように、私はメソッドの引数に渡すことができるという別のゲッターを使用するための私のオプション何getWeight()
例えば?
私は多分(それが可能の場合)ゲッターを返す別の方法を使用して考えていたが、私はそのための良い実装のトラブル考え方を持っています。助けてくれてありがとう!
アンディ・ターナー:
渡しToIntFunction<T>
パラメータとして:
public <T> int calcSum(List<T> items, ToIntFunction<? super T> fn) {
return items.stream()
.mapToInt(fn)
.sum();
}
// Example invocations:
int heightSum = calcSum(items, MyClass::getHeight);
int weightSum = calcSum(items, MyClass::getWeight);
<? super T>
AAである有界ワイルドカード(具体的には低有界ワイルドカード)。それはちょうど少しをより柔軟ビットAPIになります。例えば、ワイルドカードのため、あなたが呼び出すことができます。
ToIntFunction<Object> constantValue = a -> 1;
int count = calcSum(items, constantValue);
のでconstantValue
いずれかを受け入れObject
、それはまた、受け入れることができMyClass
インスタンスを。
拘束がなければ、あなたはに合格することはできませんToIntFunction<Object>
あなたが別のインスタンスを持っている必要があるだろう、別のリストの要素タイプのために:
ToIntFunction<MyClass> constantValueForMyClass = a -> 1;
ToIntFunction<MyOtherClass> constantValueForMyOtherClass = a -> 1;
ToIntFunction<YetAnotherClass> constantValueForYetAnotherClass = a -> 1;
// ...
これだけの退屈で反復的です。