Java中lambda函数的任意操作数

时间:2016-08-25 20:21:46

标签: java lambda

我有一个简单的lambda函数来计算某个范围内的整数倍数。现在它的总和是3和5的倍数。

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

我想取一个任意数字列表并编写一个lambda函数来检查所有这些数字的倍数范围。即如果我通过3& 5我想要那些倍数,如果我通过6,9,11我想要那三个的倍数。我想它看起来像这样:

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需要一定数量的操作吗?

1 个答案:

答案 0 :(得分:1)

您也可以流式传输多个广告并使用anyMatch。 另请注意,您之间不需要collect,在collect完成所有工作后,您通常只需要Stream。拳击可以在收集之前完成,直到那时你可以使用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()));