请求将含多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); }
逻辑对应说明
Arrays.stream(empArray)将数组转换为Stream,替代原for循环遍历peek()用于执行遍历过程中的副作用操作(即原代码中age>60的判断逻辑)filter()筛选出符合ID或名称匹配条件的员工,对应原循环中的两个if判断findFirst()获取第一个匹配的元素,对应原循环中找到匹配就立即返回的逻辑map()对匹配到的员工执行对应分支的代码,并返回指定值orElse(null)对应原循环遍历完无匹配时返回null的逻辑
内容的提问来源于stack exchange,提问作者A_12345
相关产品推荐
相关产品推荐

