jjzjj

Iterator

全部标签

java - 执行流操作 java 8 时正在更新集合

我有一个List对象,这些对象会定期从几个线程中更新。在更新时,我想使用流来过滤掉一些元素。例如;假设我有定期更新的列表:ListmyList现在在某个时间点我在那个列表上使用流Listresult=myList.stream().filter(myobj->myobjt.isValid()).collect(toList());考虑到我的列表是从几个线程更新的,这是线程安全的吗? 最佳答案 JavadocofCopyOnWriteArrayList陈述如下:The"snapshot"styleiteratormethodusesa

Java 'reduceLeft' 签名/下界类型参数

以下签名在Scala中有效且常用:traitCollection[A]{defreduceLeft[B>:A](f:(B,A)=>B):B}但是,由于>:是super的Scala等价物在Java中,我转换此签名的第一个想法(将函数类型替换为BiFunction并使用Use-Site方差注释也称为有界通配符)将是interfaceCollection{BreduceLeft(BiFunctionmapper)}但是哦不!编译器提示super中的token因为你不能有下界类型变量!现在,我该如何用Java代码编写此方法,而不必回到Java世界中不存在泛型的时候?是的,我知道你认为我可以使用

java - 将列表迭代器传递给 Java 中的多个线程

我有一个包含大约20万个元素的列表。我是否可以将此列表的迭代器传递给多个线程并让它们遍历整个批处理,而不需要它们中的任何一个访问相同的元素?这就是我此刻的想法。主要内容:publicstaticvoidmain(String[]args){//Imaginethislisthasthe200,000elements.ArrayListlist=newArrayList();//Gettheiteratorforthelist.Iteratori=list.iterator();//CreateMyThread,passingintheiteratorforthelist.MyThrea

Java - 使用列表迭代器返回对链表中特定位置的引用

我有一个Portfolio类,它也有Investment类的链表(例如-Google是Investment的一个实例),每项投资都有一个交易历史(另一个链表),其中包含每笔交易的数据。当用户想要进行交易(以5K的价格购买谷歌股票)时,我需要查找投资(在谷歌中)是否已经存在于investmentsList中。如果没有-添加新投资(并为其交易历史添加交易),如果有-只需添加另一个链接到谷歌的tradeHistory链表。问题-我需要findInvestment方法从investmentList返回对google(投资实例)的引用,这样我就可以更新它的交易历史。该方法返回一个listIter

java - 在 Java 中声明迭代器

我对Java中的迭代器很困惑。教程是这样读的:IntheJavaprogramminglanguage,aninterfaceisareferencetype,similartoaclass,thatcancontainonlyconstants,methodsignatures,andnestedtypes.Therearenomethodbodies.Interfacescannotbeinstantiated—theycanonlybeimplementedbyclassesorextendedbyotherinterfaces.Extensionisdiscussedlater

java - 创建自定义迭代器 Java?

我对如何在Java中为类实现自定义迭代器感到有点困惑。我需要在不使用我已经可用的内置库的情况下制作一个ArrayList。我了解创建类的基础知识,但我无法理解如何让Iterator适应所有这些。我有以下内容:我创建了一个实现可迭代接口(interface)的通用类,它看起来像这样:publicclassMyArrayListimplementsIterable{然后我必须创建一个名为MyIterator的类,根据文档的措辞,它是一个独立的类。这看起来相当简单我创建了一个名为MyIterator的新类并让它实现迭代器接口(interface)所以它看起来像这样:publicclassMy

java - 在 Java 中设计迭代器

我遇到过很多需要迭代器的问题。通常,它们很简单,您已经拥有可以遵循的底层数据结构。其他时候,它会变得更复杂。一个示例是使用中序遍历在没有父链接的情况下迭代BST。这需要您执行以下操作:在构造函数中创建一个堆栈。迭代到最左边的节点。存储有更多节点要访问以便从hasNext()轻松返回。存储要访问的下一个节点,以便从next()轻松返回。您可以在hasNext()或next()中定位下一个节点。您还可以在构造函数中或在对hasNext()的第一次调用中定位第一个节点。我的问题对于在迭代器实现中在哪里完成大部分工作,是否有标准或最佳实践?一种方式比另一种方式“更清洁”吗?

java - 条目集上的通用迭代器

staticvoidmyMethod(Mapmap){Iterator>it=map.entrySet().iterator();}我看到以下编译错误:类型不匹配:无法从Iterator>转换至Iterator> 最佳答案 尝试Iterator>it=map.entrySet().iterator();您的尝试不起作用的原因有点难以理解,特别是因为Iterator不消耗任何T(即它没有将T作为参数的方法)。您不能分配Iterator>到Iterator>出于同样的原因,你不能分配Iterator>到Iterator>.capture

c# - Java 迭代器与 C# IEnumerable

我注意到Java的Iterator(接口(interface))类似于C#的IEnumerable,但是有没有办法像这样使用它:privateIEnumerableit;it=labels.iterator();在Java中我可以这样做:privateIteratorit;it=labels.iterator();Java的Iterator接口(interface)在C#中的等效项是什么? 最佳答案 它不经常使用,但类比是IEnumerator界面:varenumerator=labels.GetEnumerator();.NET的

java - 为什么在我使用迭代器时类 HashSet<T> 的值已经排序?

我的main方法中有以下代码,当我遍历Set并打印值时,这些值已经排序。这是什么原因?Setset=newHashSet();set.add(2);set.add(7);set.add(3);set.add(9);set.add(6);for(inti:set){System.out.println(i);}输出:23679 最佳答案 纯属巧合。AHashSet不保留或保证任何顺序。Itmakesnoguaranteesastotheiterationorderoftheset;inparticular,itdoesnotguara