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

请求将含多if/for的Java 7代码重构为Java 8 Stream实现

重构Java 7循环代码为Java 8 Stream实现

原Java 7代码

private String findEmp(String nameOrIdToCompare){
    for (Employee emp: empArray){
        if(emp.getAge() > 60){
            //some code
        }
        if (nameOrIdToCompare.equalsIgnoreCase(emp.getID())){
            //some code
            return titleOrIdToCompare; // 注:此处变量名疑似笔误,推测应为nameOrIdToCompare
        }
        else if(emp.getName().equalsIgnoreCase(nameOrIdToCompare)){
            //some code
            return titleOrIdToCompare;
        }
    }
    return null;
}

Java 8 Stream实现

private String findEmp(String nameOrIdToCompare) {
    return Arrays.stream(empArray)
            // 处理年龄大于60的逻辑
            .peek(emp -> {
                if (emp.getAge() > 60) {
                    // 原逻辑中的some code
                }
            })
            // 筛选出ID或名称匹配的员工
            .filter(emp -> 
                nameOrIdToCompare.equalsIgnoreCase(emp.getID()) 
                || emp.getName().equalsIgnoreCase(nameOrIdToCompare)
            )
            .findFirst()
            // 对匹配到的员工执行对应逻辑并返回结果
            .map(emp -> {
                if (nameOrIdToCompare.equalsIgnoreCase(emp.getID())) {
                    // ID匹配时的some code
                } else {
                    // 名称匹配时的some code
                }
                return nameOrIdToCompare; // 修正笔误,与参数名保持一致
            })
            // 无匹配时返回null
            .orElse(null);
}

逻辑对应说明

  1. Arrays.stream(empArray) 将数组转换为Stream,替代原for循环遍历
  2. peek() 用于执行遍历过程中的副作用操作(即原代码中age>60的判断逻辑)
  3. filter() 筛选出符合ID或名称匹配条件的员工,对应原循环中的两个if判断
  4. findFirst() 获取第一个匹配的元素,对应原循环中找到匹配就立即返回的逻辑
  5. map() 对匹配到的员工执行对应分支的代码,并返回指定值
  6. orElse(null) 对应原循环遍历完无匹配时返回null的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:10:18