当前位置: 首页 > 知识库问答 >
问题:

无限流和过滤器

匡凌
2023-03-14
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamExample {
    public static void main(String[] args) {
        List<Integer> numbers = Stream.iterate(0, x -> x+3)
                                        .filter(x -> x>10 && x<100).peek(System.out::println)
                                        .collect(Collectors.toList());
        numbers.forEach(System.out::println);
    }
}

将此流收集到列表中

正如我所看到的,infinity循环有一些问题,所以peek()打印范围内的数字(12,99),这是可以的,但之后它再次打印范围内的数字(11,98),等等,你能解释一下我在哪里犯了错误吗?

共有1个答案

段宏毅
2023-03-14

编译器和运行库都不知道filter将过滤掉100以上的所有数字。因此,运行库继续生成无限个整数并对其应用筛选器。

您有多种方法来解决此问题:

使用limit将无限流截断为有限流。不过,这使得下面的过滤器有点不必要(如果设置严格的限制,只有x>10测试仍然相关)。

public static void main(String[] args) {
    List<Integer> numbers = Stream.iterate(0, x -> x+3)
                                    .limit(34)
                                    .filter(x -> x>10 && x<100).peek(System.out::println)
                                    .collect(Collectors.toList());
    numbers.forEach(System.out::println);
}
public static void main(String[] args) {
    List<Integer> numbers = IntStream.range(0, 34)
                                    .map(x -> 3*x)
                                    .collect(Collectors.toList());
    numbers.forEach(System.out::println);
}
 类似资料:
  • 当前,我们的 Restful Web API 不仅能够提供客户端需要的资源,还实现了认证和权限,可以保证数据的安全。大家在日常中一定有过这样的经历,有些网站免费用户一天只能免费观看 3 部视频,超过就要付费,否则无法观看,另外,如果想找到 2020 年上映的全部电影,只需在检索时选中想要的年份就可以。那么我们搭建的 Restful Web API 能实现类似的功能吗?当然可以,这就涉及到了限流与过

  • 问题内容: 我想实现一个过滤器来执行身份验证,但是不知何故它陷入了无限循环中……任何想法都值得赞赏。 调试模式下的这段代码仅无限次运行,基本上,我想在用户未登录时将其重定向到login.jsp。任何答复表示赞赏。 问题答案: 这里, 您将向目标页面发送 新的 HTTP请求,而不是使用当前请求。如果此新的HTTP请求被映射到过于通用的网址格式(例如),则当然会再次点击过滤器。并且将执行相同的检查,并

  • 我有一个名为的类,用它描述活动及其开始时间和结束时间。这些属性是、、。我必须使用流对这些活动进行分组和过滤,这些活动的总持续时间超过10小时。我成功地计算了持续时间的总和,并根据活动将它们分组:

  • 我一直在检查Kafka流。我一直在测试下面的Kafka流代码 生产者主题:(这是第一个生产者主题-发送以下json数据) JSON-主题的生产者: Stream Topic代码:(这是第二个Streaming代码和主题) 如果UserID值为“1”,我想对其进行归档,然后将该数据发送到目标流媒体主题。 当我使用“.filter”并打印System.out时。println(“value:”valu

  • 如何使用java8流和过滤器过滤嵌套循环? 假设我有一个汽车列表(

  • 假设我有一张房间清单 每个房间都有一份人员名单。 使用java8 streams,我想迭代房间列表,获取所有人员,在每个节点上执行一些方法(doSomething()),并获取所有过滤对象的列表。 这是使用java 8的最佳实践吗?