List<? extends UaNode> nodes; List<UaNode> allnodes = new ArrayList<>(); if (uaNode == null) { nodes = client.getAddressSpace().browseNodes(Identifiers.ObjectsFolder); } else { nodes = client.getAddressSpace().browseNodes(uaNode); } for (UaNode nd : nodes) { //排除系统性节点,这些系统性节点名称一般都是以"_"开头 if (Objects.requireNonNull(nd.getBrowseName().getName()).contains("_")) { continue; } // allnodes.add(nd .getBrowseName().getName()); allnodes.add(nd); // browseNode(nd); } if (allnodes.size()>=3){ return allnodes.subList(3,allnodes.size()); }else{ return new ArrayList<>(); }对以上代码进行优化
时间: 2024-03-13 18:46:07 浏览: 112
以下是对代码的优化建议:
1. 可以使用Stream API来简化代码。例如,将所有节点的名称转换为字符串后再进行过滤和收集:
```java
List<UaNode> allnodes = nodes.stream()
.filter(nd -> !nd.getBrowseName().getName().startsWith("_"))
.collect(Collectors.toList());
```
2. 可以避免创建新的`ArrayList`对象,而是直接对原有的`nodes`列表进行截取操作:
```java
if (allnodes.size() >= 3) {
return nodes.subList(3, nodes.size());
} else {
return Collections.emptyList();
}
```
综合起来,可以将原有的代码优化为:
```java
List<? extends UaNode> nodes;
if (uaNode == null) {
nodes = client.getAddressSpace().browseNodes(Identifiers.ObjectsFolder);
} else {
nodes = client.getAddressSpace().browseNodes(uaNode);
}
List<UaNode> allnodes = nodes.stream()
.filter(nd -> !nd.getBrowseName().getName().startsWith("_"))
.collect(Collectors.toList());
return allnodes.size() >= 3 ? nodes.subList(3, nodes.size()) : Collections.emptyList();
```
这样可以使代码更加简洁、易读、高效。
阅读全文