如何在Java流上进行三向过滤/分组

时间:2018-06-24 02:33:57

标签: java java-stream

我有如下所示的Java列表表示形式

列表数据表示形式

[
    { "type" : "Error", "name" : "xyz" },
    { "type" : "Success", "name" : "abc" },
    { "type" : "none", "name" : "prq" },
    { "type" : "Success", "name" : "" },
    { "type" : "Success", "name" : "xyz" },
    { "type" : "Warning", "name" : "efc" }
    .
    .
    .
]

(此处为部分表示)。 以及下面的对象表示形式

public Node {
    List<String> errorNames;
    List<String> SuccessNames;
    List<String> WarningNames;
    }

我想使用Java流根据类型区分三种类型的名称,并将每个名称添加到各自的列表中。

最好的方法(Stream.filter / Collect / Map其他任何方法)将列表分割成这样,以便最后“ Node's->(所有列表)”将具有对应的数据?

1 个答案:

答案 0 :(得分:1)

假设您的Node类实际上看起来像这样:

public class Node {
    private String type;
    private String name;

    public Node(String type, String name) {
        this.type = type;
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public String getName() {
        return name;
    }
}

您可以结合使用Collectors#groupingByCollectors#mapping来创建Map<String, List<String>>,其中键为type,值是{{ List中的每个name中的1}}:

Node

输出:

type