草庐IT

ITERATOR

全部标签

java:在目录和子目录中根据文件名查找文件

我需要根据目录树中的名称查找文件。然后显示该文件的路径。我找到了类似的东西,但它是根据扩展名搜索的。任何人都可以帮助我如何根据我的需要修改此代码...谢谢publicclassfilesFinder{publicstaticvoidmain(String[]args){Fileroot=newFile("c:\\test");try{String[]extensions={"txt"};booleanrecursive=true;Collectionfiles=FileUtils.listFiles(root,extensions,recursive);for(Iteratoriter

java - 使用迭代器时如何确定最后一个元素?

我喜欢使用迭代器原理的for循环,比如for(Strings:collectionWithStrings)System.out.println(s+",");问题:如何判断当前元素是否为最后一个元素?有自己的索引,如int=0;i这可以通过i==collection.size()-1实现,但不好。对于上面的例子,是否也可以用迭代器确定最后一个元素? 最佳答案 的确,Iterator#hasNext方法返回一个boolean值,确定迭代器是否将使用next方法返回另一个元素。你的迭代可以这样写:Iteratoriterator=col

java - 在方法中返回可迭代对象是不好的做法吗?

我经常在很多地方读到应该避免返回iterable并返回collection。例如-publicIterablePortals(){//alistofsomemazeconfigurationsListmazes=createMazes();...returnCollections.unmodifiableList(mazes);}因为返回一个iterable只对在foreach循环中使用它有用,而collection已经提供了一个iterator并提供更多控制。你能告诉我什么时候在方法中专门返回一个iterable是有益的吗?或者我们应该始终返回一个集合?注意:这个问题不是关于Guav

java - java.util.Iterator.remove() 方法是 'optional operation' 是什么意思?

我试图从Iterator对象中过滤特定元素,我可以通过iterator.remove()方法删除错误元素。这是我的方法stub:privatestaticIteratorprocess(Iteratoriter,Perp){while(iter.hasNext()){Ao=iter.next();if(p.per(o)){iter.remove();}}returniter;}我可以删除不相关的元素,但是当我查看Iterator.reomve()的javaapi时,它说:voidremove():Removesfromtheunderlyingcollectionthelastelem

Java:在修改集合内容时迭代集合

我希望迭代一个集合,但集合的内容会在迭代过程中修改。我希望在创建迭代器时迭代原始集合,而不是迭代添加到集合中的任何新元素。这怎么可能?这是set的默认行为还是我该如何实现?我能想到的一种方法是从原始集合中获取一个不会被修改的新集合,但这似乎不够优雅,必须有更好的解决方案。 最佳答案 如果您想确保看不到任何新元素,那么拍摄集合的快照对我来说就是正确的解决方案。有一些集合,例如ConcurrentSkipListSet这将允许您继续迭代,但我无法看到关于迭代器在查看新元素方面的行为的任何保证。编辑:CopyOnWriteArraySet

java - 如何找到可迭代对象的大小?

这个问题在这里已经有了答案:Whatisthebestwaytogetthecount/length/sizeofaniterator?(10个答案)关闭8年前。我正在编写MR作业。但是我遇到了与Iterable对象相关的问题。我需要找到它的大小。我将它转换为一个List对象,但那是错误的。(List可以转换为Iterable,但不能反转。)还有另一种方法,即为对象使用Iterator并为每个值递增一个计数器。但这不是最佳解决方案。谁能提出更好的方法?请帮帮我。提前致谢。

java - query.list 和 query.iterate 的区别

使用Query.list()到底有什么区别?和Query.iterator()?使用其中任何一个是否有任何性能增强。我的意思是他们中的任何一个都在实现lazyloading?或者是Query.iterator()最终与query.list().iterate()相同还有为什么没有Criteria.iterator()只有Criteria.list() 最佳答案 Query.list():执行1个SQL查询并加载整个数据。即使记录存在于缓存中,也会执行新的SQL查询以从数据库加载记录。Listlist1=session.createQ

java - 在可以避免的情况下需要在迭代时手动同步 Synchronized 列表吗?

我的问题是关于synchronizedList方法集合类。Javadocs说:用户在遍历返回的列表时必须手动同步它:Listlist=Collections.synchronizedList(newArrayList());...synchronized(list){Iteratori=list.iterator();//Mustbeinsynchronizedblockwhile(i.hasNext())foo(i.next());}虽然其他方法不需要手动同步。我查看了Collections类的源代码并且发现同步化已经针对所有方法进行了处理,例如addpublicbooleanadd

Java 迭代器和 for-each-loop。有什么方法可以访问底层迭代器?

我非常喜欢Java中的for-each-loop结构(for(Te:iterable)),它适用于任何Iterable。因为在许多情况下,它使代码易于阅读和编写。我想知道是否有任何方法可以从这样的循环中访问底层迭代器。如果我想使用remove(),这可能是强制性的来自迭代器。 最佳答案 不,for-each循环的全部意义在于抽象出底层迭代器。如果需要,必须声明。 关于Java迭代器和for-each-loop。有什么方法可以访问底层迭代器?,我们在StackOverflow上找到一个类似

java - Iterator.remove() IllegalStateException 异常

在下面的代码中,我有一个trycatchblock,它尝试使用Iterator从Vector中删除一个元素。我创建了自己的类QueueExtendingVect,它扩展了Vector并实现了Iterator。变量qev1是类QueueExtendingVect的实例。我也已经向这个Vector添加了一些元素。try{qev1.iterator().remove();}catch(UnsupportedOperationExceptione){System.out.println("CallingIterator.remove()andthrowingexception.");}qev1