当遇到深层嵌套代码,如for,if,lambda表达式或内部类及这些代码的组合,这时我们可以通过Java 8的语法特性来进行优化。
下面的代码是一个嵌套循环的示例。
public MappedField getMappedField(final String storedName) {
for (final MappedField mf : persistenceFields) {
for (final String n : mf.getLoadNames()) {
if (storedName.equals(n)) {
return mf;
}
}
}
return null;
}
重构1:
嵌套的for/if语句通畅可以通过Java 8中的stream来替代。
Optional<String> found = persistenceFields.stream()
.flatMap(mappedField -> mappedField.getLoadNames().stream())
.filter(storedName::equals)
.findFirst();
上述重构代码会返回Optional,但笔者希望返回mappedField对象,再次改造后的代码如下。
persistenceFields.stream()
.filter(mappedField -> {
for (String name : mappedField.getLoadNames()) {
if (storedName.equals(name)) {
return true;
}
}
return false;
}
)
.findFirst()
重构2: 进行更好的封装
重构1还存在一些问题,