将嵌套循环重构为lambda表达式
来源:爱站网时间:2021-09-16编辑:网友分享
我正在尝试将以下代码重构为lambda函数:private可选
fetchByNumList(ObjectId objectId){List
numList = objectId.getNumList();如果(...
问题描述
我正在尝试将以下代码重构为lambda函数:
private Optional fetchByNumList(ObjectId objectId) {
List numList = objectId.getNumList();
if (!numList.isEmpty()) {
for (Reference numRef : numList) {
Optional otherNum = findOtherNum(numRef);
if (otherNum.isPresent()) {
return otherNum;
}
}
}
return Optional.empty();
}
private Optional findOtherNum(Reference numRef) {
List numRefList = numRef.getNumRefList();
if (!numRefList.isEmpty()) {
for (String num : numRefList) {
Matcher matcher = REGEX_PATTERN.matcher(num);
if (matcher.matches()) {
return Optional.of(matcher.group(3));
}
}
}
return Optional.empty();
}
这是我到目前为止所拥有的:
private Optional fetchByNumListLambda(ObjectId objectId) {
return objectId.getNumList().stream()
.map(numRef -> { numRef.getNumRefList().stream()
.map(num -> {
Matcher matcher = REGEX_PATTERN.matcher(num);
if (!matcher.matches()) {
return Optional.of(matcher.group(3));
}
return Optional.empty();
});
return Optional.empty(); //I believe this is the one, overriding the value to Optional.empty.
})
.filter(Optional::isPresent)
.findFirst()
.orElse(Optional.empty());
}
但是,当我运行时,它返回Optional.empty。我敢肯定它可能会被清理,我仍在尝试摆脱lambda的困扰。谢谢!
思路:
我相信您的lambda函数不等于您的嵌套循环。在嵌套循环中,检查是否为“ matcher.matches()”,如果结果为true,则返回Optional.of(matcher.group(3))。
但是,lambda函数中的语句却相反,您检查“!matcher.matches()”,然后返回Optional.of(matcher.group(3))。
我认为它返回Optional.empty,因为您在lambda中的代码应为:
if (matcher.matches()) {
return Optional.of(matcher.group(3));
}
而不是:
if (!matcher.matches()) {
return Optional.of(matcher.group(3));
}