2016-10-07 8 views
6

私はパラメータStream<Double> streamをとる静的メソッドを持っています。 arraylist.stream()またはArrays.stream(array)から来ています。ラムダ式をメソッド参照と置換える

このメソッドの仕事は、3で割り切れるすべての整数の合計を返すことです。

return stream.filter(i -> i.intValue() % 3 == 0).mapToInt(i -> i.intValue()).sum()

このメソッドは動作しますが、しかし、IntelliJのは、次のことを示唆している:

この検査は、メソッドの参照に置き換えることができますラムダを報告します。

私はメソッド参照、特にクラス名を使用している参照インスタンスメソッドにあまり慣れていません。

私はエラーを出す次のことを試しました。

stream.filter(i -> i.intValue() % 3 == 0).mapToInt(Integer::intValue).sum()

任意の提案ですか?

+6

'i'はDouble型なので、' Double :: intValue'を使うべきです。 IntelliJは検査だけでなく変更を提案します。ちょうどalt-enterを押す。 – mrjink

+2

IntelliJがそのような置換を提案した場合、その置換を*行う*ことができます。ところで、 '.mapToInt(Double :: intValue).filter(i - > i%3 == 0)' – Holger

+1

@Holgerは、一度だけunboxする方が効率が良いでしょう。四捨五入はintに倍増し、それは3で割り切れ、結果を変更しますか? –

答えて

7

あなたは、パラメータストリームは、ダブルのタイプなので、あなたがダブルクラスのintValue関数を呼び出しているので、あなたが

stream.mapToInt(Double::intValue).filter(i -> i % 3 == 0).sum() 

を行う必要が言ったように。

関連する問題