How to traverse a nested list in an optional?

Fernando Ania :

I have an object node which has a getNodes() method that returns a list, and I want to traverse this list only if node is not null.

I tried to do the following where I thought I could map the stream of the list and traverse it, but what happens is that it tries to perform the filter on the Stream Object and not on the contents of the list.

public void updateNode(Node node) {
    List<Node> nodes = Optional.ofNullable(node)
                   .map(node -> Stream.of(node.getNodes))
                   .filter().......orElse()

    // operation on filtered nodes.
    ....

}
Naman :

In the worst of the implementation choices, to the correct answer here to place a null check one has the following alternates available:

Optional.ofNullable(node)
        .map(Node::getNodes)
        .orElse(Collections.emptyList())
        .stream() // Stream of nodes
        .filter(...)

or with Java-9 +

Stream.ofNullable(node)
        .flatMap(nd -> nd.getNodes().stream())
        .filter(...)

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=379205&siteId=1