2009-03-23 36 views

Trả lời

7

Có hai phần để trả lời. Phần đầu tiên là các phương thức đối số biến Scala lấy một T * là một phương thức phân phối trên các phương thức lấy Seq [T]. Bạn nói với Scala để xử lý một Seq [T] như là một danh sách các đối số thay vì một đối số duy nhất bằng cách sử dụng "seq: _ *".

Phần thứ hai đang chuyển đổi Tập hợp [T] thành Seq [T]. Không có cách nào được xây dựng chung để làm trong các thư viện chuẩn của Scala, nhưng một cách rất dễ dàng (nếu không nhất thiết phải hiệu quả) để làm điều đó là gọi toArray. Đây là một ví dụ hoàn chỉnh.

scala> val lst : java.util.Collection[String] = new java.util.ArrayList 
lst: java.util.Collection[String] = [] 

scala> lst add "hello" 
res0: Boolean = true 

scala> lst add "world" 
res1: Boolean = true 

scala> Set(lst.toArray : _*) 
res2: scala.collection.immutable.Set[java.lang.Object] = Set(hello, world) 

Lưu ý scala.Predef.Set và scala.collection.immutable.HashSet là từ đồng nghĩa.

+0

Khi nó quay ra tôi không thể làm điều này vì "bên trong" của tôi bộ sưu tập thực sự là một thể hiện của java.util. Danh sách, không phải là một Scala Seq. Tôi đã hỏi câu hỏi này như sau: http://stackoverflow.com/questions/674713/converting-java-collection-into-scala-collection –

11

Cách ngắn gọn nhất để làm điều này có lẽ là sử dụng ++ điều hành:

import scala.collection.immutable.HashSet 
val list = List(1,2,3) 
val set = HashSet() ++ list 
Các vấn đề liên quan