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

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

      

      

  • 相关阅读:
    更改开机运行级别
    三个路由的路由表信息
    网络
    网卡配置文件与网络命令显示不一致
    使CentOS7恢复网卡传统命名
    删除CentOS7的虚拟网卡
    将克隆的eth3和eth4改为eth0和eth1
    单臂路由--1个物理网卡绑定多个IP地址
    洛谷P1098 字符串的展开
    洛谷P1086 花生采摘
  • 原文地址:https://www.cnblogs.com/Shock-W/p/6632630.html
Copyright © 2020-2023  润新知