【问题标题】:Partitioning an Iterator in scala 2.7.5在 scala 2.7.5 中对迭代器进行分区
【发布时间】:2010-12-03 06:26:55
【问题描述】:

看起来好像在 scala 2.7.5 中的 Iterator 上没有 partition 方法(在 2.8 中有)。我希望有一个分区而不丢失Iterator懒惰,所以以下是不是一个选项:

itr.toList.partition( someTest(_) )

谁能推荐一种不实现我自己的partition 方法的方法?例如,是否有某种方法可以将 Iterator 转换为延迟评估的 Stream

【问题讨论】:

    标签: scala iterator scala-2.8 lazy-evaluation


    【解决方案1】:

    您尝试过Stream.fromIterator 方法吗?它产生一个包含给定迭代器元素的流:)。

    一个例子是:

    val iter = List(1,2,3,4).elements // just a simple iterator
    
    val str = Stream.fromIterator(iter)
    
    str.partition(_ >= 3)
    

    希望它有所帮助(这是您的想法)。

    编辑:只是一个例子来表明这是懒惰的(并且被记住 - 就像所有 Streams 一样)。

    scala> val iter = new Iterator[Int] {
         | var lst = List(1,2,3,4)
         | def hasNext() = !lst.isEmpty
         | def next() = { val x = lst.head; println(x); lst = lst.tail; x }
         | }
    
    scala> val stream = Stream.fromIterator(iter)
    1
    stream: Stream[Int] = Stream(1, ?)
    
    scala> stream.partition(_ >= 2)
    2
    3
    4
    res1: (Iterable[Int], Iterable[Int]) = (ArrayBuffer(2, 3, 4),ArrayBuffer(1))
    
    scala> stream.partition(_ >= 3)
    res2: (Iterable[Int], Iterable[Int]) = (ArrayBuffer(3, 4),ArrayBuffer(1, 2))
    

    注意:省略了一些输出,因为它非常冗长。

    -- 弗拉维乌·西普西根

    【讨论】:

      猜你喜欢
      • 2016-03-01
      • 2016-07-16
      • 2020-09-11
      • 2012-01-23
      • 2015-08-23
      • 2021-04-21
      • 2013-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多