You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Java嵌套遍历计数的业务代码改写为lambda表达式?

业务逻辑Lambda表达式改写方案

需求说明

遍历listRegistrationTypeWork列表,检查每个元素的子列表getRegistrationTypeWorkAuthors是否非空,若不为空则遍历该子列表,查找authorCoautor等于指定type的记录并累加计数,统计所有符合条件的记录总数。

原有实现代码

public int qtyMaximumWorksByAuthorCoauthor(AuthorCoauthor type) {
    int count = 0;
    for (RegistrationTypeWork tab : listRegistrationTypeWork) {
        if (CollectionUtils.isNotEmpty(tab.getRegistrationTypeWorkAuthors())) {
            for (RegistrationTypeWorkAuthors author : tab.getRegistrationTypeWorkAuthors()) {
                if (author.getAuthorCoauthor().equals(type))
                    count++;
            }
        }
    }
    return count;
}

Lambda改写实现(基于Java Stream API)

和原有业务逻辑完全对齐,写法更简洁:

public int qtyMaximumWorksByAuthorCoauthor(AuthorCoauthor type) {
    return listRegistrationTypeWork.stream()
            // 过滤子列表非空的元素
            .filter(tab -> CollectionUtils.isNotEmpty(tab.getRegistrationTypeWorkAuthors()))
            // 展开所有子列表的作者元素
            .flatMap(tab -> tab.getRegistrationTypeWorkAuthors().stream())
            // 匹配指定type的记录
            .filter(author -> type.equals(author.getAuthorCoauthor()))
            // 统计符合条件的总数
            .count();
}

可选优化

如果不想依赖CollectionUtils工具类,可以把过滤条件替换为原生写法,效果完全一致:
.filter(tab -> tab.getRegistrationTypeWorkAuthors() != null && !tab.getRegistrationTypeWorkAuthors().isEmpty())


内容的提问来源于stack exchange,提问作者Romeu Fernandes Bessa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:06:02