Java 8流分组按字符串值

Ben

我有一个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章