我有一个JSON文件,其中包含以下形式的数据:
{
"type":"type1",
"value":"value1",
"param": "param1"
}
{
"type":"type2",
"value":"value2",
"param": "param2"
}
我也有这样的对象:
public class TestObject {
private final String value;
private final String param;
public TestObject(String value, String param) {
this.value = value;
this.param = param;
}
}
我想要创建一个Map<String, List<TestObject>>
包含TestObject
每个类型的s列表的。
这是我编写的代码:
Map<String, List<TestObject>> result = jsonFileStream
.map(this::buildTestObject)
.collect(Collectors.groupingBy(line -> JsonPath.read(line, "$.type")));
方法在哪里buildTestObject
:
private TestObject buildTestObject(String line) {
return new TestObject(
JsonPath.read(line, "$.value"),
JsonPath.read(line, "$.param"));
}
这不起作用,因为该map()
函数返回一个TestObject
,因此该collect
函数不再在JSON String行上起作用。
在现实生活中,我无法将“ type”变量添加到TestObject
文件中,因为它是来自外部库的文件。
如何TestObject
按JSON文件中的类型对进行分组?
您可以将映射操作移至groupingBy的下游收集器:
Map<String, List<TestObject>> result = jsonFileStream
.collect(Collectors.groupingBy(line -> JsonPath.read(line, "$.type"),
Collectors.mapping(this::buildTestObject, Collectors.toList())));
这将保留字符串,以便您可以提取类型作为分类器,并将映射应用于结果组的元素。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句