gpt4 book ai didi

java - Scala中如何处理Map的复杂操作

转载 作者:行者123 更新时间:2023-12-02 04:23:43 24 4
gpt4 key购买 nike

我是 Scala 编程新手,但在 Java 方面有多年经验。

Java 中有一个简单的问题让我在 Scala 中陷入困境。

我有数据库中的一些记录

+----+--------+--------------+------+
| id | level | subLevel | name |
+----+--------+--------------+------+
| 3 | level1 | subLevel1 | three|
| 4 | level2 | subLevel1 | four |
| 5 | level2 | subLevel1 | five |
+----+--------+--------------+------+

需要像这样总结到Map

{
"level1": {
"subLevel1": [
{
"id": "3",
"name": "three"
}
]
},
"level2": {
"subLevel1": [
{
"id": "4",
"name": "four"
},
{
"id": "5",
"name": "five"
}
]
}
}

如果用Java,也许我可以这样解决:

public JSONObject centerMap() {
List<Center> centerList = centerService.getAllCenter();

Map<String, Map<String, List<Map<String, String>>>> centerMap = new HashMap<String, Map<String, List<Map<String, String>>>>();
for (Center center : centerList) {
Map<String, List<Map<String, String>>> subLevelList = centerMap.get(center.getLevel());
if (subLevelList == null)
subLevelList = new HashMap<String, List<Map<String, String>>>();

List<Map<String, String>> names = subLevelList.get(center.getSubLevel());
if (names == null)
names = new ArrayList<Map<String, String>>();

final Center c = center;
names.add(new HashMap<String, String>(){{
put("name", c.getName());
put("id", String.valueOf(c.getId()));
}});
subLevelList.put(center.getSubLevel(), names);
centerMap.put(center.getLevel(), subLevelList);
}

return JSONObject.fromObject(centerMap);
}

我真的不知道在 Scala 中执行此操作的最佳方法。
但几乎可以肯定不是 scala.collection.mutable.Map

最佳答案

考虑一个案例类,例如

case class Entry(id: Int, level: String, subLevel: String, name: String)

以及条目集合,

val entries = Array(
Entry(3, "level1", "subLevel1", "three"),
Entry(4, "level2", "subLevel1", "four"),
Entry(5, "level2", "subLevel1", "five"))

然后考虑按 levelsubLevel 对这些值进行分组,如下所示,

entries.groupBy { case Entry(id,level,subLevel,name) => (level,subLevel)}

因此

Map((level1,subLevel1) -> Array(Entry(3,level1,subLevel1,three)), 
(level2,subLevel1) -> Array(Entry(4,level2,subLevel1,four),
Entry(5,level2,subLevel1,five)))

关于java - Scala中如何处理Map的复杂操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32450065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com