如何在Scala中创建查找映射

Ben*_*ith 5 collections functional-programming scala

虽然我知道有几种方法可以做到这一点,但我最感兴趣的是找到最惯用和最实用的Scala方法.

给出以下陈腐的例子:

case class User(id: String)
val users = List(User("1"), User("2"), User("3"), User("4")) 
Run Code Online (Sandbox Code Playgroud)

什么是创建user.id - > User的不可变查找Map的最佳方法,以便我可以通过user.id执行快速查找.

在Java中,我可能会使用Google-Collection的Maps.uniqueIndex,尽管我不太关心它的独特属性.

Dan*_*mon 5

您可以将用户保留在List中并使用list.find:

users.find{_.id == "3"} //returns Option[User], either Some(User("3")) or None if no such user
Run Code Online (Sandbox Code Playgroud)

或者如果要使用Map,请将用户列表映射到2元组列表,然后使用toMap方法:

val umap = users.map{u => (u.id, u)}.toMap
Run Code Online (Sandbox Code Playgroud)

这将返回一个不可变的Map [String,User],然后就可以使用了

umap contains "1" //return true
Run Code Online (Sandbox Code Playgroud)

要么

umap.get("1") //returns Some(User("1"))
Run Code Online (Sandbox Code Playgroud)