Scala如何对List中的数据进行分组

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(""))
}

 

 

 

 

对于这两种数据的处理,我个人喜欢第二种

 

  

  

 

posted @ 2017-03-28 10:46  无期(瑶瑶)  阅读(4288)  评论(0编辑  收藏  举报