草庐IT

Iterator

全部标签

java - 使用嵌套迭代器迭代两级结构

我有以下两个级别XML结构体。一个盒子列表,每个盒子包含一个抽屉列表。......我正在使用StAX解析它并通过两个Iterators暴露结构:BoxIteratorimplementsIterator,IterableBoximplementsIterableDrawerIteratorimplementsIterator然后我可以执行以下操作:BoxIteratorboxList;for(Boxbox:boxList){for(Drawerdrawer:box){drawer.getId()}}在这些背后Iterators我正在使用StAX并且他们都在访问相同的基础XMLStrea

java - 如何将 "peek"设置为 Java 扫描器上的下一个元素?

也就是说,如何在不移除迭代器的情况下获取迭代器的下一个元素?因为我可能会也可能不想删除它,具体取决于它的内容。我有一个文件扫描器,我在其中使用Scannernext()方法遍历XML标记。提前致谢。 最佳答案 这是另一种基于包装器的解决方案,但这个只有一个内部扫描器。我留下另一个来展示一个解决方案,这是一个不同的,可能更好的解决方案。同样,此解决方案并未实现所有内容(并且未经测试),但您只需实现您打算使用的那些部分。在此版本中,您将保留对next()实际内容的引用。importjava.util.Scanner;publicclas

java - 是否有可能合理地模拟 yield-syntax,或许在 Java 8 的帮助下?

我今天正在试验这个问题,来自EulerProblems:Apalindromicnumberreadsthesamebothways.Thelargestpalindromemadefromtheproductoftwo2-digitnumbersis9009=91×99.Findthelargestpalindromemadefromtheproductoftwo3-digitnumbers.我考虑了一下,当然可以用for循环来完成,但是我想使用Java8,因为它打开了新的选项。但是首先,我不知道如何生成IntStream产生这样的元素,所以我最终还是使用了普通的for循环:publ

Java "for"语句实现阻止垃圾收集

UPD21.11.2017:该错误已在JDK中修复,请参阅commentfromVicenteRomero总结:如果for语句用于任何Iterable实现,集合将保留在堆内存中,直到当前范围(方法、语句主体)结束,并且即使您没有对该集合的任何其他引用并且应用程序需要分配新内存,也不会被垃圾回收。http://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8175883https://bugs.openjdk.java.net/browse/JDK-8175883示例:如果我有下一个代码,它分配一个包含随机内容的大字符串列表:impor

java - 如何验证HashMap中的值是否存在

我有以下HashMapkey在哪里是String和value由ArrayList表示:HashMap>productsMap=AsyncUpload.getFoodMap();我还有一个ArrayListfoods在我的应用程序中实现。我的问题是,找出我的HashMap是否最好的方法是什么?包含特定的String从我的第二个ArrayList?我试过没有成功:IteratorkeySetIterator=productsMap.keySet().iterator();Iterator>valueSetIterator=productsMap.values().iterator();wh

java - 为什么 iterator.remove 不抛出 ConcurrentModificationException

iterator.remove()与list.remove()有何不同,因此迭代器不会抛出异常而list.remove()会扔一个吗?最后,两者都在修改集合大小。这里请忽略多线程。我只是在谈论for-each循环和迭代器循环。据我所知,for-each循环仅在内部创建迭代器。我很困惑。 最佳答案 我想你的意思是,如果你正在迭代一个列表,为什么list.remove()导致抛出ConcurrentModificationException而iterator.remove()不是吗?考虑这个例子:Listlist=newArrayLis

java - 为什么 Iterator.next() 抛出 ConcurrentModificationException

这个问题在这里已经有了答案:WhyisaConcurrentModificationExceptionthrownandhowtodebugit(8个答案)关闭3年前。奇怪的是,这段小代码抛出了上面提到的异常。此外,查看网上发布的代码这似乎是正确的:importjava.util.ArrayList;importjava.util.Iterator;publicclassIteratorTest{ArrayListarr=newArrayList();Iteratori=arr.iterator();publicvoidshow(){arr.add(2);arr.add(5);arr.

java - 为什么Iterator接口(interface)中没有add方法

在Iterator中,Sun添加了remove方法来删​​除集合中最后访问的元素。为什么没有向集合中添加新元素的add方法?它可能对集合或迭代器产生什么样的副作用? 最佳答案 好的,我们开始:设计常见问题解答中明确说明了答案:为什么不提供Iterator.add方法?语义不清楚,因为Iterator的契约不保证迭代的顺序。但是请注意,ListIterator确实提供了添加操作,因为它确实保证了迭代的顺序。http://docs.oracle.com/javase/1.4.2/docs/guide/collections/design

java - 在同一个类中实现 Java Iterator 和 Iterable?

我正在尝试理解JavaIterator和Iterable接口(interface)我正在写这个类classMyClassimplementsIterable{publicString[]a=null;publicMyClass(String[]arr){a=arr;}publicMyClassIteratoriterator(){returnnewMyClassIterator(this);}publicclassMyClassIteratorimplementsIterator{privateMyClassmyclass=null;privateintcount=0;publicMy

java - ConcurrentModificationException 尽管使用同步

publicsynchronizedXgetAnotherX(){if(iterator.hasNext()){Xb=iterator.next();Stringname=b.getInputFileName();...returnb;}else{returnnull;}}尽管声明header中有同步语句,但在我使用iterator.next();的那一行我仍然得到一个ConcurrentModificationException异常;这里有什么问题吗? 最佳答案 ConcurrentModificationException通常与