2016-08-25 7 views
0

私はある範囲の整数倍の合計を計算する簡単なラムダ関数を持っています。今のところ、私は数字の任意のリストを取得し、すべてのそれらの数値の倍数のための範囲をチェックするラムダ関数を書きたいと思い3の倍数と5Javaのラムダ関数の任意の操作数

System.out.println(IntStream.rangeClosed(1, 999) 
      .boxed().collect(Collectors.toList()) 
      .stream().filter(n -> n%3 == 0 || n%5 == 0).collect(Collectors.toList())); 

合計されます。すなわち、私が3を渡す場合& 5私はそれらの倍数が必要です、私は6,9,11を渡す場合、それらの3の倍数が欲しいです。

System.out.println(IntStream.rangeClosed(1, 999) 
      .boxed().collect(Collectors.toList()) 
      .stream().filter(n -> for(int mult : multiples)if(n%mult==0)).collect(Collectors.toList())); 

これは可能でしょうか、またはlambdaには固定数の操作が必要ですか?

+0

'multiples'のタイプは何ですか? –

+0

倍数がリストとして宣言されています PaulJRobbins

答えて

1

複数のストリームをストリームすることもでき、anyMatchを使用できます。 また、collectを間に入れる必要はないことに注意してください。ですべての作業が完了したら、通常はcollectにしてください。ボクシングは収集する直前に行うことができます。それまではIntStreamで作業できます。

int[] multiples = { 3, 5, 7 }; 
System.out.println(IntStream.rangeClosed(1, 999) 
    .filter(n -> IntStream.of(multiples).anyMatch(k -> n % k == 0)) 
    .boxed() 
    .collect(Collectors.toList())); 
+1

あなたはなぜ中間の '.collect(Collectors.toList())。stream()'を削除したのかを述べるべきです。その間に '.boxed()'を '.filter()'の後ろに移動する必要があります。 'List'をビルドする準備が整うまで、ボックスに入れる必要はありません。一般的な表示のためには、新しい行にそれぞれを書き込んで '.'で整列させると、ストリームチェーンを見る方が簡単です。 – Andreas

+0

@Andreasありがとう、あなたのコメントに応じて私の答えを更新 – garnulf

+0

パーフェクト、それはまさに私が探していたものです。助けてくれてありがとう! – PaulJRobbins

関連する問題