每次调用next()时终止一个流

时间:2017-02-15 14:49:09

标签: java java-stream guava

我不确定是否已经提出问题。我还是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的Guava做到这一点?

1 个答案:

答案 0 :(得分:1)

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

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

但是,由于您希望next()方法转换迭代器中的下一个项目,因此您应该实现自己的Iterator并覆盖它,如下所述:https://stackoverflow.com/a/5849625/4467208