2011-10-31 46 views
9

Tôi có một Danh sách các đối tượng, mỗi đối tượng có hai trường mà tôi sẽ gọi là "khóa" và "giá trị". Từ đó tôi cần phải xây dựng một HashMap tạo thành các mục mà "bản đồ" chìa khóa để "giá trị".Tạo một HashMap trong Scala từ một danh sách các đối tượng mà không cần lặp

Tôi biết điều đó có thể được thực hiện bằng cách lặp qua danh sách và gọi hmap.put(obj.key, obj.value) cho mọi mục trong danh sách. Nhưng bằng cách nào đó nó "mùi" như thế này có thể được thực hiện trong một dòng mã đơn giản bằng cách sử dụng map hoặc flatMap hoặc một số kết hợp khác của hoạt động Danh sách của Scala, với cấu trúc chức năng trong đó. Tôi đã "ngửi" đúng không, và nó sẽ được thực hiện như thế nào?

Trả lời

17
list.map(i => i.key -> i.value).toMap 
+4

OP muốn một 'HashMap' không phải là một' Map' – samthebest

+1

Cảnh báo: Nó không hỗ trợ các khóa trùng lặp! –

8

Ngoài ra:

Map(list map (i => i.key -> i.value): _*) 
+0

Tôi cho rằng lợi thế của việc này là bạn có thể chỉ định loại Bản đồ bạn cần, do đó, nó là mẫu chung hơn –

+1

@LuigiPlinge Điều đó đúng. Tôi thích sử dụng '.toMap', vì nó dễ đọc hơn nhiều. Nếu hiệu suất là mối quan tâm lớn, _maybe_ sử dụng 'breakOut'. –

+0

Tôi bị mất phần cuối cùng: _ * Tôi nhận được rằng dấu gạch dưới là một trình giữ chỗ cho biến chức năng, nhưng tôi không thể thấy nó phù hợp với biểu thức đó, cũng như vai trò của dấu sao và dấu hai chấm trong ngữ cảnh đó . – Gigatron

4

Để tạo từ một bộ sưu tập (nhớ không có một từ khóa new)

val result: HashMap[Int, Int] = HashMap(myCollection: _*) 
Các vấn đề liên quan