每次调用 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
并像此处解释的那样覆盖它:
我不确定是否有人问过问题。我对 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
并像此处解释的那样覆盖它: