Scala如何對List中的數據進行分組(無期-瑤瑤)
1.為什么需要這樣做
我們經常會遇到這樣一種問題(以User對象和Role對象舉例,一對多的問題),有兩個List集合,一個存放着User對象,一個存放着Role對象.他們之間的關系可以通過User中的roleId對應Role中的id。這時,我想把Role對象中的數據添加到User對象中去。那么此問題便產生了。當然你們會覺着為什么不在數據庫查出來就用inner解決呢,不這么做有兩個原因:1.對象型數據庫不支持inner操作。2.inner對數據庫的負擔較重。
2.怎么解決?
首先先列舉第一種辦法,比較下:
(1).直接遍歷兩個List,將數據進行拼接。
val listUser = List(user1, user2, user3) val listRole = List(role1, role2, role3) listUser.map{user=> val roleId = user.getRoleId
var roleStr = "" val roleName = listRole.foreach{role=>
if(role.getId == roleId) roleStr = roleStr + "-" + role.getName
} user.setRoleName(roleName) }
(2).先對一個RoleList進行分組,key存roleId,value存放List[Role]
val roleMap: Map[String, List[Role]] = Map[String, List[Role]]() //利用Map進行分組 listRole.foreach { role=> val roleId= role.getId roleMap.get(roleId) match { case Some(id) =>//包含取出來添加進List roleMap+= (roleId -> id.:+(role)) case None => //不包含 roleMap+= (roleId-> List(role)) } }
listUser.map{user=>
user.setRoleName(roleMap.get(user.getRoleId).getOrElse(""))
}
對於這兩種數據的處理,我個人喜歡第二種