Wel*_*lez 1 java java-8 java-stream
我想在流上连续执行以下操作.
1).我想从创建数字流2来n.
我想这可以这样做:IntStream.range(2, n).
2).添加过滤器,只有当此数字不能被已通过此过滤器的任何其他数字整除时,才能使数字更进一步.
我无法实现这样的过滤器.我想我必须创建一个包含an的匿名类,ArrayList我将存储通过此过滤器的所有数字ArrayList.这一切应该看起来像:
IntStream.range(2, n).filter(new IntPredicate() {
ArrayList<Integer> prev;
@Override
public boolean test(int value) {
if (prev == null) {
prev = new ArrayList();
return true;
}
for (int i = 0; i < prev.size(); i++) {
if (value % prev.get(i) == 0) {
return false;
}
}
prev.add(value);
return true;
}
Run Code Online (Sandbox Code Playgroud)
3).获取Map<Integer, Integer>,其中密钥为数百(即100,200,300,400等),值为每百个中的素数数.所以对于百,100我必须找到[100,199]范围内的素数.
我想非常清楚,在第二步之后,流中只剩下素数.但是我不知道如何执行第三步并且不确定我的第二步的实现.
能帮我解决所有操作吗?
假设您有一个方法isPrime(int)(您可以在线轻松找到实现),以下是如何对结果进行分组:
IntStream.range(2, n)
.filter(i -> isPrime(i))
.boxed()
.collect(Collectors.groupingBy(i -> i / 100 * 100,
Collectors.summingInt(i -> 1)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |