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

与溪流一起工作

萧心远
2023-03-14

我想知道我是否能做这样的事情。假设我有一个数字流1-20。我想利用一个特性,比如drop 3(我想用Java术语来说是限制还是跳过?)并产生一个流,即数字流:

1-20、4-20、7-20等

然后可能平坦地将这些全部映射到一条溪流中。我尝试了使用Stream.iterate的各种组合,主要是从流生成流,但我一直收到一个IllegalStateExcema,说流已经操作或关闭。

例如,人们可能期望这个代码

  Stream.iterate(Stream.of(1,2,3,4,5), x -> x.skip(1).collect(Collectors.toList()).stream()).limit(5).flatMap(x -> x).forEach(x -> System.out.println(x));

生产:1,2,3,4,5,2,3,4,5,3,4,5,4,5,5

但它没有,它抛出了一个例外。我是不是错过了什么明显的东西。我知道一个外卖行动,但我认为要到Java9点才会结束。

编辑:我已经设法通过以下方法获得了一个丑陋的解决方案:

List<Integer> list = IntStream.rangeClosed(1, 20).boxed().collect(Collectors.toList());
Stream.iterate(list, x -> x.stream().skip(3).collect(Collectors.toList())).limit(7).map(x -> x.stream().limit(3).collect(Collectors.toList())).flatMap(List::stream).forEach(System.out::println);

所以我有一个列表1...20,然后得到一个列表流1..20, 4..20, 7..20等等。如果我取其中的前3个元素,最后得到1..3, 4..6, 7..9等。如果我把这个平面映射,我回到1...20。

我的问题是,A.有没有办法让我不必硬编码上面的限制(7),所以当我处理完所有的输入元素集时,它会自动停止,B.我不喜欢收集到列表中——我可以不这样做吗纯粹是在集合之前的流,或者甚至只是在平面地图之后打印?

共有1个答案

公良文彬
2023-03-14

也许你在找类似的东西

IntStream.rangeClosed(1, 20)
   .flatMap(i -> IntStream.rangeClosed(i, 20))

...然后你可以用它做任何你喜欢的事情;例如。每个(System.out::println)

如果你想每三分之一就这样做,你最好做一些类似的事情

IntStream.rangeClosed(0, 20/3)
  .map(i -> 3 * i + 1)
  .flatMap(i -> IntStream.rangeClosed(i, 20))
 类似资料:
  • 我有一个通用的Streams API问题,我想“高效地”解决。假设我有一个(可能非常大,可能无限)流。我想以某种方式对其进行预处理,例如,过滤掉一些项目,并对一些项目进行变异。让我们假设这个预处理是复杂的,时间和计算密集型的,所以我不想做两次。 接下来,我想对项序列执行两组不同的操作,并使用不同的流类型构造处理每个不同序列的远端。对于无限流,这将是一个forEach,对于有限流,它可能是一个收集器

  • 我有一张班友名单 我想分组名单的foo根据他们的位置和总和,我如何实现它与Java流? 我所取得的成就: 我的代码:

  • 我写了一个kafka流代码,使用kafka 2.4 kafka客户端版本和kafka 2.2服务器版本。我的主题有50个分区 我的Kafka流代码有选择键()DSL操作,我有200万条记录使用相同的KEY。在流配置中,我已经完成了 因此,我能够使用完全相同的键使用不同的分区。如果我没有按预期使用轮循机制,我的所有消息都会转到同一分区。 直到现在一切都很好,但我意识到;当我使用RoundRobin分

  • 我是Kafka的新手,我正在构建一个使用Twitter API作为数据源的入门项目。我已经创建了一个生产者,它可以查询Twitter API,并使用字符串序列化器将数据发送到我的kafka主题,以获得键和值。我的Kafka Stream应用程序读取这些数据并进行字数统计,但也按Tweet的日期分组。这一部分是通过一个名为wordCounts的KTable来完成的,以利用它的upsert功能。这个K

  • 我对流媒体有一个普遍的问题,但对于问题的范围,让我们限制自己使用Kafka Streams。让我们进一步缩小范围,将我们的问题局限于单词计数,或者可能是一般的计数。假设我有一个由某个键和一个值组成的流,键可以是一个字符串(假设我们可以有很多字符串,除了空字符串,由世界上的任何字符组成),值是一个整数,现在我们正在构建一个单词计数应用程序,如果词汇表中的单词总数是一万亿,我们不能将它们存储在本地缓存

  • 我正在读一个带有如下浮点数的CSV: 并导入到数据框中,然后将此数据框写入新位置 现在,此