Tôi đã cố gắng tìm cách giữ đúng kiểu dáng chức năng trong biểu thức khi tôi cần thu thập nhiều tham số của một đối tượng vào Danh sách.Làm thế nào để giữ đúng với phong cách chức năng trong Scala cho các biểu thức
Ví dụ: giả sử tôi có đối tượng Thông báo có cả từII (id người dùng thông báo) và objectOwnerId (id của người dùng đã tạo đối tượng gốc). Đây có thể khác nhau trong thông báo kiểu facebook ("X cũng bình luận trên bài viết của Y").
tôi có thể thu thập các userIds với một biểu hiện như vậy
val userIds = for { notification <- notifications } yield notification.fromId
tuy nhiên nói rằng tôi muốn thu thập cả fromIds và objectOwnerIds vào một danh sách duy nhất, là có cách nào để làm điều này trong một duy nhất cho biểu hiện mà không có người dùng của vars?
tôi đã thực hiện một cái gì đó như thế này trong quá khứ:
var ids = List()
for {
notification <- notifications
ids = ids ++ List(notification.fromId, notification.objectOwnerId)
}
ids = ids.distinct
nhưng nó cảm thấy như có phải là một cách tốt hơn. Việc sử dụng một var, và sự cần thiết phải gọi riêng biệt sau khi tôi hoàn thành bộ sưu tập đều xấu xí. Tôi có thể tránh sự khác biệt với một số điều kiện, nhưng tôi đang cố gắng tìm hiểu các phương pháp chức năng thích hợp để làm việc.
Cảm ơn bạn đã giúp đỡ!
Tôi nghĩ câu hỏi thực là, "cách ánh xạ từ [Y (x1, x2), Y (x3, x4)] đến [x1, x2, x3, x4]? " đôi khi được gọi là "flatMap". –
@pst giả định không có cách nào để có được một danh sách duy nhất mà không sử dụng var, sau đó có đó là câu hỏi. – Kareem
'var'/mutation là trực giao trong trường hợp này. –