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

 

 

 

 

對於這兩種數據的處理,我個人喜歡第二種

 

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM