我有一个简单的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需要一定数量的操作吗?
答案 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()));