java - 如何使用 Java API Streams 执行此类操作?

标签 java java-8 java-stream

我想在流上连续执行以下操作。

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] 范围内的质数个数。

我想很明显,在第二步之后,流中只剩下质数。但是我不知道如何执行第三步,也不确定我是否执行了第二步。

你能帮我正确应用所有操作吗?

最佳答案

假设您有一个方法isPrime(int)(您可以很容易地在网上找到一个实现),下面是对结果进行分组的方法:

IntStream.range(2, n)
        .filter(i -> isPrime(i))
        .boxed()
        .collect(Collectors.groupingBy(i -> i / 100 * 100,
                Collectors.summingInt(i -> 1)))

关于java - 如何使用 Java API Streams 执行此类操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48016725/

相关文章:

java - 我需要向 java 传递什么标志来限制 .class 文件的运行时间和内存使用量?

java - 如何汇总对象列表的各个字段并以单个对象的形式返回结果

java - 累加器在并行流中无法正常工作

java - 映射返回 boolean 值的 Lambda 表达式

java - 从对象列表到基于 Java 8 或 Guava 的键和值对对象进行分组

java - 如何转换 for 循环以找到 Java 流的第一次出现?

java - 调节 java 流的过滤器

java - 在 OneTOMany 映射中,外键在 Hibernate-MySQL 中插入为 null

java - 页面读取 - 内存或编码问题?

java - 从 Pentaho Kettle 调用 Java 库