【发布时间】:2017-12-29 02:36:09
【问题描述】:
我想在一个流上连续执行以下操作。
1)。我想创建一个从2 到n 的数字流。
我想这可以这样完成:IntStream.range(2, n)。
2)。添加过滤器,仅当该数字不能被已通过此过滤器的任何其他数字整除时,该数字才会更进一步。
我无法实现这样的过滤器。我想我必须创建一个包含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;
}
3)。获取Map<Integer, Integer>,其中键是数百个(即 100、200、300、400 等),值是每百个中的素数个数。因此,对于一百个 100,我必须找到 [100, 199] 范围内的素数个数。
我想很明显,在第二步之后,流中只剩下素数了。但是我不知道如何执行第三步,也不确定第二步的实现。
您能帮我正确应用所有操作吗?
【问题讨论】:
-
流并不是非常适合这个。不是真正适合这项工作的工具。
标签: java java-8 java-stream