Когда используется для понимания, базовый код использует map
, flatMap
, foreach
, filter
или withFilter
- см. Связанные вопросы. В этом конкретном примере этот код будет эквивалентен jArrayList.map(_.sender)
, а map
создает новые коллекции (здесь я игнорирую неявное преобразование, чтобы сделать его простым).
То, что здесь происходит, возможно, не интуитивно, и, возможно, могло бы быть улучшено, заключается в том, что ArrayList
не реализует map
. Вместо этого неявное преобразование дает Buffer
, а map
для Buffer
возвращает Buffer
.
Конечно, Buffer
на JavaConversions
сохраняет базовую коллекцию, ArrayList
, в качестве резервного хранилища. Вновь созданный Buffer
, с другой стороны, будет основан не на этом, а на одной из собственных коллекций Scala.
Вы всегда можете сделать это, хотя:
val buffer = (for (val subscription <- jArrayList ) yield subscription.sender).asList