我们可以使用 Stream API 的 groupby 将 List<Map<String, Object>> 转换为 Map<Object, Map<String, Object>>
Can we convert List<Map<String, Object>> to Map<Object, Map<String, Object>> using groupby of Stream API
我有一个 List<Map<String, Object>>
这样的列表
[{"A": 2616100,
"B": 2616100,
"C": 31,
"D": "Sold Promissory Buyer"
},
{
"A": 101322143.24,
"B": 50243301.2,
"C": 569,
"D": "Auction"
},
{
"A": 72000,
"B": 93900,
"C": 1,
"D": "Sold Third Party"
}]
将流 API 与 groupBy 方法 salesReportForSoldProperty.stream().collect(Collectors.groupingBy(tags -> tags.get("D")))
结合使用,我能够获取集合 Map<Object, List<Map<String, Object>>>
但是当我尝试创建此集合的 JSON 时,我得到 Json 这样的
{
"Sold Promissory Buyer": [
{
"A": 2616100,
"B": 2616100,
"C": 31,
"D": "Sold Promissory Buyer"
}
],
"Auction": [
{
"A": 101322143.24,
"B": 50243301.2,
"C": 569,
"D": "Auction"
}
],
"Sold Third Party": [
{
"A": 72000,
"B": 93900,
"C": 1,
"D": "Sold Third Party"
}
]
}
这里每个值都是JSON数组,因为我得到的是Map<Object, List<Map<String, Object>>>
。有什么方法可以使用 Stream API 获取 Map<Object, Map<String, Object>>
collection,所以我可以获得正确的 JSON(没有 JSONArray 值)
您应该改用 Collectors.toMap
:
salesReportForSoldProperty.stream().collect(
Collectors.toMap(tags -> tags.get("D"), Function.identity()));
请注意,在这种情况下,如果您的输入包含两个具有相同 "D"
值的元素,您将得到一个 IllegalStateException
,因为您不能将两个值放入同一个映射键中。如果你想忽略重复,你可以将合并函数指定为第三个参数:
salesReportForSoldProperty.stream().collect(
Collectors.toMap(tags -> tags.get("D"), Function.identity(), (a, b) -> a));
我有一个 List<Map<String, Object>>
这样的列表
[{"A": 2616100,
"B": 2616100,
"C": 31,
"D": "Sold Promissory Buyer"
},
{
"A": 101322143.24,
"B": 50243301.2,
"C": 569,
"D": "Auction"
},
{
"A": 72000,
"B": 93900,
"C": 1,
"D": "Sold Third Party"
}]
将流 API 与 groupBy 方法 salesReportForSoldProperty.stream().collect(Collectors.groupingBy(tags -> tags.get("D")))
结合使用,我能够获取集合 Map<Object, List<Map<String, Object>>>
但是当我尝试创建此集合的 JSON 时,我得到 Json 这样的
{
"Sold Promissory Buyer": [
{
"A": 2616100,
"B": 2616100,
"C": 31,
"D": "Sold Promissory Buyer"
}
],
"Auction": [
{
"A": 101322143.24,
"B": 50243301.2,
"C": 569,
"D": "Auction"
}
],
"Sold Third Party": [
{
"A": 72000,
"B": 93900,
"C": 1,
"D": "Sold Third Party"
}
]
}
这里每个值都是JSON数组,因为我得到的是Map<Object, List<Map<String, Object>>>
。有什么方法可以使用 Stream API 获取 Map<Object, Map<String, Object>>
collection,所以我可以获得正确的 JSON(没有 JSONArray 值)
您应该改用 Collectors.toMap
:
salesReportForSoldProperty.stream().collect(
Collectors.toMap(tags -> tags.get("D"), Function.identity()));
请注意,在这种情况下,如果您的输入包含两个具有相同 "D"
值的元素,您将得到一个 IllegalStateException
,因为您不能将两个值放入同一个映射键中。如果你想忽略重复,你可以将合并函数指定为第三个参数:
salesReportForSoldProperty.stream().collect(
Collectors.toMap(tags -> tags.get("D"), Function.identity(), (a, b) -> a));