mem*_*und 1 java lambda java-8 java-stream
从现有列表中提取结果集的公共代码可以如下:
List<Node> results;
for (Node node : rsp.getNodes()) {
if (node.isValid() && node.getType == NodeType.TEST &&...) {
if (results == null) {
results = new ArrayList<>();
}
results.add(node);
}
}
Run Code Online (Sandbox Code Playgroud)
现在使用java 8和lambdas,因为建议总是使用流来支持?
rsp.getNodes().stream.filter(node -> {
return node.isValid() && node.getType == NodeType.TEST &&...;
}).forEach(node -> results.add(node));
Run Code Online (Sandbox Code Playgroud)
对我来说,最近从java8开始,这看起来并不比现在的java7代码更清晰.无论如何你有更多的经验,并且可以肯定地推荐我使用这些类型的"快捷方式"与lambdas,而不是旧的foreach风格?
我知道最后它可能是一个品味问题.如果是的话,你会觉得我的例子是一个完全可行的情况下,可以始终与流和lambda表达式作为一个很好的做法(我有意识地不使用术语"最佳实践")所取代?
也许分离出你要过滤的条件,然后你也可以使用方法引用:
List<Node> results = rsp.getNodes().stream()
.filter(Node::isValid) // Method reference
.filter(n -> n.getType == NodeType.TEST) // Lambda
.filter(...)
.collect(Collectors.toList()); // Produces List from Stream
Run Code Online (Sandbox Code Playgroud)