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(""))
}
对于这两种数据的处理,我个人喜欢第二种