2017-08-28 8 views
1

私は変更が必要なコードを持っています。 それは以下のようになります。ラムダをthenComparingメソッドに戻す方法

new ComparatorFactory<>(thing -> thing.getLong()); 
return new ComparatorFactory.bySmthThenLong(things); 

そして、ファクトリクラス自体:

private final Function<T, Long> getLong; 
ComparatorFactory(Function<T, Long> getLong) { 
    this.getLong = getLong; 
} 

Comparator<T> bySmth(Collection<T> things) { 
    // Smth happens, then returns comparator. 
} 

そして、私は別の方法にチェーンにbySmth方法を必要とし、これらの2つの方法が時々同じように別々でなければなりません第1段階が使用される。

private Function<T, Long> preprocessLong(Function<T, Long> getLong) { 
// divide Long by some number and return new function. 
} 

したがって、このコンパレータの作成は私の理解にそのようになります:

Comparator<T> bySmthThenLong(Collection<T> things) { 
    return bySmth(things).thenComparing(preprocessLong(getLong)); 
} 

しかし、私は比較の次のラウンド前にこのLongに何かをする必要があるので、私はメソッドを持っている preprocessLongメソッドが内部でどのように見えるのか分かりません。手伝ってくれる?ありがとう。

答えて

3

「ファンクション」インタフェースのJavaDocを見ると、ラムダでオーバーライドしているメソッドが抽象的な唯一のものであるため、「apply()」メソッドであることがわかります。 あなたはこのような新しい関数の中でapplyを呼び出します:

private Function<T, Long> preprocessLong(Function<T, Long> getLong) { 
    return (thing) -> getLong.apply(thing)/someNumber; 
} 
+0

このように見えます、ありがとうございます。もし私が条件を持っていれば、 '戻り条件? (thing) - > getLong.apply(thing)/ someNumber:0; '真でない場合は0を返し、ここでそれを行う方法は? –

+1

'return(物) - >(条件)? getLong.apply(物)/ someNumber:0; ' – feldim2425

+0

ありがとうございました! –

関連する問題