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

如何在Java流上进行三向过滤/分组,java,java-stream,Java,Java Stream,我有一个如下所示的Java列表表示 数据的列表表示法 这里的部分表示。 下面是一个对象表示 public Node { List<String> errorNames; List<String> SuccessNames; List<String> WarningNames; } 我想使用Java streams根据名称的类型将三种类型的名称分开,并将每个名称添加到各自的列表中 使用Stream.filter/Collect/

我有一个如下所示的Java列表表示

数据的列表表示法

这里的部分表示。 下面是一个对象表示

public Node {
    List<String> errorNames;
    List<String> SuccessNames;
    List<String> WarningNames;
    }
我想使用Java streams根据名称的类型将三种类型的名称分开,并将每个名称添加到各自的列表中

使用Stream.filter/Collect/Map任何其他方法分割列表的最佳方式是什么,以便在结束节点的->处,所有列表都有相应的数据

假设您的节点类实际上是这样的:

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;
    }
}
您可以将CollectorGroupingBy与CollectorMapping结合使用来创建一个映射,其中它们的键是类型,值是该类型每个节点的名称列表:

输出:

{Warning=[efc], Error=[xyz], none=[prq], Success=[abc, , xyz]}

你能解释一下collectCollectors.groupingByNode::getType,Collectors.mappingNode::getName,Collectors.toList@NikulPadhya Collectors.groupingBy在本例中只是按节点对象的类型对其进行分组,而Collectors.mapping会将节点更改为其名称。@Jcob,非常感谢您的回答,我能够使用您在原始答案中给出的提示使其工作。我想我正在寻找一种可以在流上执行或过滤的过滤方法。
var nodes = List.of(
    new Node("Error", "xyz"), new Node("Success", "abc"),
    new Node("none", "prq"), new Node("Success", ""),
    new Node("Success", "xyz"), new Node("Warning", "efc")
);

var map = nodes.stream()
               .collect(Collectors.groupingBy(Node::getType,
                        Collectors.mapping(Node::getName, Collectors.toList())));

System.out.println(map);
{Warning=[efc], Error=[xyz], none=[prq], Success=[abc, , xyz]}