如何遍历可选的嵌套列表?
How to traverse a nested list in an optional?
我有一个对象 node
,它有一个 getNodes()
方法,returns 一个列表,只有当 node
不是 null
.
我尝试在我认为可以映射列表流并遍历它的地方执行以下操作,但实际情况是它尝试对流对象而不是列表内容执行筛选。
public void updateNode(Node node) {
List<Node> nodes = Optional.ofNullable(node)
.map(node -> Stream.of(node.getNodes))
.filter().......orElse()
// operation on filtered nodes.
....
}
在您的代码中:
Optional.ofNullable(node).map(node -> Stream.of(node.getNodes))
这将创建单个项目的流:节点列表本身。
Stream.of(node.getNodes))
相反,要获取节点流,然后您可以在其中过滤节点,请使用:
node.getNodes().stream().filter(...
与引入可选语句相比,使用简单的 if not null 语句可能更好。它使代码更具可读性并减少开销。
if (node != null) {
node.getNodes().stream.filter(...
}
此外,您正在从 void 方法返回。
在最糟糕的实施选择中, 放置一个 null
检查有以下备选方案可用:
Optional.ofNullable(node)
.map(Node::getNodes)
.orElse(Collections.emptyList())
.stream() // Stream of nodes
.filter(...)
或 Java-9 +
Stream.ofNullable(node)
.flatMap(nd -> nd.getNodes().stream())
.filter(...)
我有一个对象 node
,它有一个 getNodes()
方法,returns 一个列表,只有当 node
不是 null
.
我尝试在我认为可以映射列表流并遍历它的地方执行以下操作,但实际情况是它尝试对流对象而不是列表内容执行筛选。
public void updateNode(Node node) {
List<Node> nodes = Optional.ofNullable(node)
.map(node -> Stream.of(node.getNodes))
.filter().......orElse()
// operation on filtered nodes.
....
}
在您的代码中:
Optional.ofNullable(node).map(node -> Stream.of(node.getNodes))
这将创建单个项目的流:节点列表本身。
Stream.of(node.getNodes))
相反,要获取节点流,然后您可以在其中过滤节点,请使用:
node.getNodes().stream().filter(...
与引入可选语句相比,使用简单的 if not null 语句可能更好。它使代码更具可读性并减少开销。
if (node != null) {
node.getNodes().stream.filter(...
}
此外,您正在从 void 方法返回。
在最糟糕的实施选择中,null
检查有以下备选方案可用:
Optional.ofNullable(node)
.map(Node::getNodes)
.orElse(Collections.emptyList())
.stream() // Stream of nodes
.filter(...)
或 Java-9 +
Stream.ofNullable(node)
.flatMap(nd -> nd.getNodes().stream())
.filter(...)