【问题标题】:Terminate a stream each time next() is called [duplicate]每次调用 next() 时终止一个流[重复]
【发布时间】:2017-07-04 07:19:45
【问题描述】:

我不确定是否已经提出问题。我对 Java 的 Stream API 和 Google 的 Guava 还是很陌生。

我想使用 Java 的 Stream API 一次将一个对象转换或映射到另一个项目。这似乎与收集不同。似乎 collect 在被调用时会转换流中的所有项目,而不是一次一个。理想情况下,我想提供一个可迭代对象,允许在调用 next() 之类的内容时转换一个项目。

也许它看起来像这样:

private Iterable<ObjectA> getIterable(Iterable<ObjectB> itemsToConvert) {
  return itemsToConvert.map(mappingFunction);
}

public static void main(String[] args) {
  Iterable<ObjectA> myIterable = getIterable(itemsFromSomewhere);
  // do the conversion here
  ObjectA myItem = myIterable.next();
}

有没有办法在 Java 中使用 Stream API 做到这一点?如果没有,有没有办法使用谷歌的 Guava 来做到这一点?

【问题讨论】:

标签: java java-stream guava


【解决方案1】:

哦,你想挂钩Iterator.next 方法。我不认为这是可能的。但是,您可以操纵myItem,因为您获得了所需的参考,例如

 ObjectA myItem = myIterable.next();
 manipulateObject(myItem); // change stuff do stuff

但是,由于您希望 next() 方法转换迭代器中的下一项,因此您应该实现自己的 Iterator 并像这里解释的那样覆盖它:https://stackoverflow.com/a/5849625/4467208

【讨论】:

  • 伪代码不能解决我的问题,但你给的链接可以
  • 出于对 stackoverflow 质量的考虑,我建议您编写自己的答案并将其作为已接受的答案进行检查,或者编辑来自@Murat K 的答案,但将其保留为已接受的答案。
猜你喜欢
  • 2018-03-06
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 2017-10-28
  • 2015-12-17
  • 2018-03-29
相关资源
最近更新 更多