scala - 如何根据列表的第一个元素对对象列表的列表进行分组
问题描述
如何根据列表的Lists
第Objects
一个元素对列表进行分组?
我正在使用的一个库向我返回了一个对象列表列表。
val result = (List(PersonObj(name=John,Id=23), LikesOrder(type=toys, order=1), ItemLiked(type=figurerine,id=23)),
List( PersonObj(name=John,Id=23), LikesOrder(type=toys, order=2), ItemLiked(type=figurerine,id=32))
),List( PersonObj(name=Tiffanny,Id=32), LikesOrder(type=toys, order=1), ItemLiked(type=figurerine,id=23) ))
列表中的每个项目代表 1 次用户交互。在我提供的列表中,我们有 3 个交互条目。其中 2 个条目来自 John,其 id 为 23,并且有 2 个项目喜欢。
我有办法做到这一点吗?
上面的结果将导致映射Map<PersonObj, List<ItemLiked>>
?
Scala有可能吗?
解决方案
如果内部列表总是PersonObj
, LikesOrder
,ItemLiked
你可以
case class PersonObj(name: String, Id: Int)
case class LikesOrder(ttype: String, order: Int)
case class ItemLiked(ttype: String, id: Int)
val result = List(
List(PersonObj(name="John",Id=23),
LikesOrder(ttype="toys", order=1),
ItemLiked(ttype="figurerine",id=23)),
List( PersonObj(name="John",Id=23),
LikesOrder(ttype="toys", order=2),
ItemLiked(ttype="figurerine",id=32)),
List( PersonObj(name="Tiffanny",Id=32),
LikesOrder(ttype="toys", order=1),
ItemLiked(ttype="figurerine",id=23) ))
val r1 =result.map(l => {
val List(p:PersonObj,_: LikesOrder,il : ItemLiked) = l
(p -> il)
})
r1.groupBy{case (p,_)=>p}.map{case (p,l) => (p,l.map(_._2))}
推荐阅读
- android - Firebase 存储异常:发生未知错误,请检查服务器响应的 http 结果代码和内部异常
- c++ - 如何在 C++ 中跨多个进程使用共享向量
- php - php mysqli 选择表中的数据而不是不同的表中的数据
- blazor-client-side - 如何向 Blazor WebAssembly 3.2.0 Preview 3 应用程序添加其他声明
- ios - 加载没有名称的数组 (JSON) (Swift 5)
- javascript - 使用 Javascript 加载新页面
- c# - 制作可以使用多种分辨率的交互式地图
- laravel - 如何在 Laravel 急切加载中使用 if 条件?
- javascript - AJAX 调用阻止导航到其他页面,直到它完成
- javascript - 这是从表格主体中删除表格行的有效方法吗?