每次调用 next() 时终止流

Terminate a stream each time next() is called

我不确定是否有人问过问题。我对 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 来做到这一点?如果没有,有没有办法使用 Google 的番石榴来做到这一点?

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

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

但是,由于您希望 next() 方法转换迭代器中的下一项,您应该实现自己的 Iterator 并像此处解释的那样覆盖它: