scala – 从java.lang.Iterator创建一个不可变的列表
我正在使用一个库(
JXPath)来查询bean的图形,以便提取匹配的元素。但是,JXPath返回一组匹配的元素作为java.lang.Iterator的一个实例,我宁愿将其转换成不可变的scala列表。有没有比迭代器迭代更简单的方法,并在每个迭代步骤中创建一个新的不可变列表?
解决方法
您可能想要重新考虑对List的需求,尽管在来自Java时感觉非常熟悉,List是不可变Seq的默认实现,它通常不是最佳选择。
列表最佳的操作是通过迭代器可以使用的操作(基本上采用连续的头元素和前置元素)。如果一个迭代器没有给你你需要的,那么我几乎可以保证一个列表不会是你最好的选择 – 一个向量将是更合适的。 有了这样的方式…推荐的技术转换Java和Scala集合(自Scala 2.8.1以来)通过 你不会这样直接隐式转换。相反,您将asScala和asJava方法映射到集合上,允许您显式执行转换。 将Java迭代器转换为Scala迭代器: javaIterator.asScala 要将Java迭代器转换为Scala列表(通过scala迭代器): javaIterator.asScala.toList 您可能还需要考虑将转换为Sue而不是toList。在迭代器的情况下,这将返回一个Stream – 允许您在更丰富的Seq接口中保留迭代器的懒惰行为。 编辑: javaIterator.asScala.toIndexedSeq (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |