将嵌套循环重构为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));
}

上一篇:在Java 8中,默认情况下未选择可用的4个收集器(GC)

下一篇:我如何将jre8与springboot应用程序捆绑在一起,以在安装了先前Java版本的服务器上运行它?

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载