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

如何使用Java Streams或其他特性简化现有for循环遍历校验代码

改写方案

完全可以用Java Stream API改写,代码会更简洁,逻辑更直观。首先先明确原代码的逻辑:遍历所有提交记录,打印所有提交日志匹配的记录的SHA值,没有匹配项时打印指定字符串。

完全匹配原逻辑的改写(打印所有匹配项)

// Java 16+ 可用toList(),更低版本可以用collect(Collectors.toList())
List<Commit> matchedCommits = commits.values().stream()
        .filter(commit -> commit.getLogMessage().equals(commitMessageToSearch))
        .toList();

matchedCommits.forEach(commit -> System.out.println(commit.getSha()));
if (matchedCommits.isEmpty()) {
    System.out.println("aksdhlkasj");
}

优化版改写(找到第一个匹配项就终止遍历,性能更高)

如果你的需求不需要打印所有匹配项,只要找到任意一个匹配的就打印,可以用下面的写法,不用遍历整个集合:

// Java 9+ 支持ifPresentOrElse
commits.values().stream()
        .filter(commit -> commit.getLogMessage().equals(commitMessageToSearch))
        .findAny()
        .ifPresentOrElse(
            commit -> System.out.println(commit.getSha()),
            () -> System.out.println("aksdhlkasj")
        );

如果是Java 8版本,改写成如下形式即可:

Optional<Commit> matchedCommit = commits.values().stream()
        .filter(commit -> commit.getLogMessage().equals(commitMessageToSearch))
        .findAny();

if (matchedCommit.isPresent()) {
    System.out.println(matchedCommit.get().getSha());
} else {
    System.out.println("aksdhlkasj");
}

补充说明

原代码中使用compareTo() == 0对比字符串,和equals()方法效果一致,除非你有特殊的排序对比需求,否则用equals()可读性更高。


内容的提问来源于stack exchange,提问作者daniel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:36:00