zoukankan      html  css  js  c++  java
  • 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(""))
    }

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

      

      

  • 相关阅读:
    PHP和Redis实现在高并发下的抢购及秒杀功能示例详解
    thinkphp整合系列之微信公众号支付
    JS之变量的运算
    (php)thinkphp3.2配置sql_server
    jyd数据结构
    mac终端下svn常用命令
    项目学习
    抛错
    phpunit
    Python
  • 原文地址:https://www.cnblogs.com/Shock-W/p/6632630.html
Copyright © 2011-2022 走看看