2017-02-15 3 views
0

Я не уверен, что вопрос уже задан. Я по-прежнему новичок в Java Stream API и Guava от Google.Завершить поток каждый раз, когда next() называется

Я хотел бы использовать 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, используя поток API? Если нет, есть ли способ сделать это с помощью Google Guava?

+3

Может быть, добавить псевдокод пример того, чего вы хотите достичь ... –

+1

@Erik это то, что вы можете ищите? http://stackoverflow.com/questions/23932061/convert-iterable-to-stream-using-java-8-jdk – Eugene

+0

@Eugene Я так думаю. Спасибо – Erik

ответ

1

О, вы хотите подключиться к методу Iterator.next. Я не думаю, что это возможно. Однако вы можете манипулировать myItem, так как вы получили требуемую ссылку, например.

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

Однако, так как вы хотите метод следующий(), чтобы преобразовать следующий элемент в итератора, вы должны реализовать свой собственный Iterator и переопределить его, как это описано здесь: https://stackoverflow.com/a/5849625/4467208

+1

Псевдокод не решает мою проблему, но ссылка, которую вы дали, – Erik

+0

Для удобства здесь, в stackoverflow, я рекомендую вам написать свой собственный ответ и проверить его как принятый, или отредактировать ответ от @Murat K , но оставьте его в качестве принятого ответа. – Wrench