dropWhile创建两个具有相同底层迭代器的迭代器?

时间:2017-05-11 17:38:54

标签: scala iterator

我在观察,这是一种我不完全理解的行为:

scala> val a = Iterator(1,2,3,4,5)
a: Iterator[Int] = non-empty iterator

scala> val b = a.dropWhile(_ < 3)
b: Iterator[Int] = non-empty iterator

scala> b.next
res9: Int = 3

scala> b.next
res10: Int = 4

scala> a.next
res11: Int = 5

看起来像:迭代器(1,2,3)的迭代器部分a被消耗,而(4,5)被遗忘。由于必须对3进行评估,因此必须使用dropWhile来定义b必须包含在b中。迭代器3, (4,5)(4,5),其中ab剩下的任何东西,完全相同的迭代器。我的理解是否正确?

鉴于上述情况,它看起来非常危险,a的行为会因dropWhile上的操作而改变。基本上我们有两个指向同一位置的对象。使用public void setLocation(String city){ spEditor=sp.edit();//// make sure sp also initialized spEditor.putString("UserCity", city); spEditor.commit(); } 喜欢这种糟糕的风格吗?

1 个答案:

答案 0 :(得分:0)

  

使用dropWhile喜欢这种糟糕的风格吗?

是的: - )