Java迭代器对Next()施加条件

use*_*861 1 java iterator

我对Java中的迭代器有点困惑.如何使next()仅返回某些值?就像说我有一个10个元素的布尔数组,我只想返回那些真实的.我是否在next()方法中设置了一个条件来检查该条件并在满足条件时返回?或者在实际使用迭代器时检查条件并继续调用next()直到得到合适的值,然后使用该值?

类似地,如果我有一个int数组,并且我想创建一个数组的字符串表示形式,其中每个元素由空格分隔,但我只想使用负数元素.如果我想用迭代器执行此操作,我是否在next()方法中检查否定元素并仅返回下一个否定的值,或者在我进行字符串表示时检查,并继续调用next( )直到我得到一个负值,然后将该值添加到字符串?

谢谢!

npe*_*npe 12

普通的Java迭代器只是迭代集合的每个元素.因此,您必须在每次迭代时自己检查值.

您编写的内容可以使用Apache Commons Collections中FilterIterator类完成.

来自JavaDoc:

这个迭代器装饰底层迭代器,只允许通过那些匹配指定的元素Predicate.

这是一个让你入门的例子:

// Create a predicate class, like this:
class MyAwesomePredicate implements Predicate {

    @Override
    public boolean evaluate(Object object) {

        // If the condition is satisfied, return true.
        // Return false otherwise.

    }     
}

// and pass it to the FilterIterator:
Iterator<SomeClass> matchingObjects = 
    new FilterIterator(myCollection.iterator(), new MyAwesomePredicate());

// Now iterate the maching objects:
while (machingObjects.hasNext() {

    // do your stuff

}
Run Code Online (Sandbox Code Playgroud)

更新:如果您愿意,还有Iterators#filter(Iterator<T>, Predicate<? super T>)来自番石榴的.与Apache Commons不同,它支持泛型,并且(可以说)更高的冷却因子.

  • 来自我的+1 - 我今天学到了一些东西,甚至还不到上午9点 (2认同)